Dockerfile中 CMD和ENTRYPOINT的区别
在 Dockerfile 中,CMD 和 ENTRYPOINT 都用于指定容器启动时要执行的命令。它们之间的主要区别是:
- CMD 用于定义容器启动时要执行的命令和参数,它设置的值可以被 Dockerfile 中的后续指令覆盖,包括在运行容器时传递的参数。如果在 Dockerfile 中没有指定 CMD,那么 Docker 将使用容器启动时所提供的默认命令。
1、CMD 指令
CMD在容器运行的时候提供一些命令及参数,用法如下:
-
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
-
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
-
CMD command param1 param2 (shell form)
第一种用法:运行一个可执行的文件并提供参数。(可执行程序+参数)
第二种用法:为ENTRYPOINT指定参数。(cmd指定参数)
第三种用法(shell form):是以”/bin/sh -c”的方法执行的命令。(执行shell命令)
如你指定:
CMD [“/bin/echo”, “this is a echo test ”]
build后运行(假设镜像名为ec):
docker run ec
就会输出:
this is a echo test
是不是感觉很像开机启动项,你可以暂时这样理解。
注意点:
docker run
命令如果指定了参数会把CMD里的参数覆盖: (这里说明一下,如:docker run -it ubuntu /bin/bash 命令的参数是指/bin/bash 而非 -it ,-it
只是docker 的参数,而不是容器的参数,以下所说参数均如此。)
同样是上面的ec镜像启动:
docker run ec /bin/bash
就不会输出: 因为CMD命令被”/bin/bash”覆盖了。
this is a echo test
- ENTRYPOINT 也用于定义容器启动时要执行的命令,但不像 CMD,它的值不会被 Dockerfile 中的后续指令覆盖,只能在运行容器时添加参数来覆盖它。也就是说,ENTRYPOINT 设置的命令一般是容器镜像所要执行的主要命令,CMD 则是选项和参数。
换句话说,CMD 是为 ENTRYPOINT 提供默认选项,ENTRYPOINT 则是容器镜像中主要执行的命令。在 Dockerfile 中定义 ENTRYPOINT 可以使您的镜像更像一个可执行文件,而在运行容器时传递参数可以以更灵活的方式执行此命令。
2、ENTRYPOINT 指令
字面意思是进入点,而它的功能也恰如其意。它可以让你的容器功能表现得像一个可执行程序一样。
容器功能表现得像一个可执行程序一样,这是什么意思呢?
直接给个例子好说话:使用下面的ENTRYPOINT构造镜像:
ENTRYPOINT ["/bin/echo"]
那么docker build出来的镜像以后的容器功能就像一个/bin/echo程序:
比如我build出来的镜像名称叫imageecho,那么我可以这样用它:
docker run -it imageecho “this is a test”
这里就会输出”this is a test”这串字符,而这个imageecho镜像对应的容器表现出来的功能就像一个echo程序一样。 你添加的参数“this is a test”会添加到ENTRYPOINT后面,就成了这样 /bin/echo “this is a test” 。现在你应该明白进入点的意思了吧。
例子:
ENTRYPOINT ["/bin/cat"]
构造出来的镜像你可以这样运行(假设名为st):这样相当: /bin/cat /etc/fstab
这个命令的作用。运行之后就输出/etc/fstab
里的内容。
ENTRYPOINT有两种写法:
写法一:
1 |
|
写法二:
1 |
|
你也可以在docker run 命令时使用–entrypoint指定(但是只能用写法一)。
下面是我把ENTRYPOINT设为[“/bin/sh -c”]时候运行的情况:
-
# docker run -it t2 /bin/bash
-
root@4c8549e7ce3e:/# ps
-
PID TTY TIME CMD
-
1 ? 00:00:00 sh
-
9 ? 00:00:00 bash
-
19 ? 00:00:00 ps
可以看到PID为1的进程运行的是sh,而bash只是sh的一个子进程,/bin/bash
只是作为 /bin/sh -c
后面的参数。
CMD可以为ENTRYPOINT提供参数,ENTRYPOINT本身也可以包含参数,但是你可以把那些可能需要变动的参数写到CMD里而把那些不需要变动的参数写到ENTRYPOINT里面例如:
1 2 3 |
|
把可能需要变动的参数写到CMD里面。然后你可以在docker run里指定参数,这样CMD里的参数(这里是-c)就会被覆盖掉而ENTRYPOINT里的不被覆盖。
--------------------------------------------------------------------------------------------------------------------------------
在Docker中,CMD
和ENTRYPOINT
都是用于指定容器启动时要执行的命令或脚本。它们之间的区别如下:
CMD
用于指定容器启动时要执行的命令。它可以有三种不同的形式:
-
CMD ["executable","param1","param2"]
(使用JSON数组形式):推荐使用这种形式,它会直接执行指定的可执行文件,并传递参数。 -
CMD command param1 param2
(使用命令形式):这种形式会将命令传递给shell进行解释执行。 -
CMD ["param1","param2"]
(使用JSON数组形式):这种形式会将指定的参数传递给ENTRYPOINT指定的可执行文件。
在Dockerfile中,可以使用多个CMD
指令,但只有最后一个CMD
指令会生效。如果容器启动时没有指定要执行的命令,将会执行最后一个CMD
指令中指定的命令。
ENTRYPOINT
:ENTRYPOINT
用于指定容器启动时要执行的可执行文件。它可以有两种不同的形式:
-
ENTRYPOINT ["executable", "param1", "param2"]
(使用JSON数组形式):推荐使用这种形式,它会直接执行指定的可执行文件,并传递参数。 -
ENTRYPOINT command param1 param2
(使用命令形式):这种形式会将命令传递给shell进行解释执行。
在Dockerfile中,只能使用一个ENTRYPOINT
指令。如果同时存在CMD
指令,CMD
中的参数将会作为ENTRYPOINT
指定的可执行文件的参数进行传递。
总的来说,CMD
用于指定容器启动时要执行的命令参数,而ENTRYPOINT
用于指定容器启动时要执行的可执行文件。可以将ENTRYPOINT
看作是容器的入口点,而CMD
则是对ENTRYPOINT
指定的可执行文件的参数进行补充。
相关文章:
Dockerfile中 CMD和ENTRYPOINT的区别
在 Dockerfile 中,CMD 和 ENTRYPOINT 都用于指定容器启动时要执行的命令。它们之间的主要区别是: - CMD 用于定义容器启动时要执行的命令和参数,它设置的值可以被 Dockerfile 中的后续指令覆盖,包括在运行容器时传递的参数。如果…...
【TC3xx芯片】TC3xx芯片的总线内存保护
前言 广义上的内存保护,包括<<【TC3xx芯片】TC3xx芯片MPU介绍>>一文介绍的MPU(常规狭义上的内存保护),<<【TC3xx芯片】TC3xx芯片的Endinit功能详解>>一文中介绍的寄存器的EndInit保护,<<【TC3xx芯片】TC3xx芯片ACCEN寄存器保护详解>>一…...
抖音小店选品必经五个阶段,看你到哪一步了,直接决定店铺爆单率
大家好,我是电商笨笨熊 新手选品必经的阶段就是迷茫期,不知道怎么选品,在哪里选品,选择什么样的品; 而有些玩家也会在进入店铺后疯狂选品,但是上架的商品没有销量; 而这些都是每个玩家都要经…...
ML在骨科手术术前、书中、术后方法应用综述【含数据集】
达芬奇V手术机器人 近年来,人工智能(AI)彻底改变了人们的生活。人工智能早就在外科领域取得了突破性进展。然而,人工智能在骨科中的应用研究尚处于探索阶段。 本文综述了近年来深度学习和机器学习应用于骨科图像检测的最新成果,描述了其贡献、优势和不足。以及未来每项研究…...
vue3-video-play 在安卓上正常播放,在ios上不能播放,问题解决
1.ios上autoplay需要静音,在播放后再打开声音 <vue3videoPlay v-if"!isComponent" v-bind"options" :playsinline"playsinline"></vue3videoPlay>let playsinline computed(() > {if (props.isComponent) {return}o…...
【C++类和对象】上篇
💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…...
微信订阅号环境搭建及开发者工具下载
目录 一、注册订阅号 1.1 选择注册 2.2 选择订阅号注册 1.3 登录进入主页面 编辑 1.4 可以进行自定义菜单 1.5 我们重点关注公众平台测试账号 编辑 1.6 自定义一个域名 1.7 用自己的微信扫描这个二维码 编辑 1.8 点击修改,并自定义个域名 二、开发…...
Failed to resolve ‘bss.myhuaweicloud.com‘ ([Errno -2] Name or service not know
Failed to resolve ‘bss.myhuaweicloud.com’ ([Errno -2] Name or service not know 解決方案: 修改/etc/resolv.conf文件来指定DNS服务器,例如添加Google的公共DNS服务器: nameserver 8.8.8.8 nameserver 8.8.4.4...
大厂基础面试题(之二)
Q1:flex布局 Flex布局容器属性包括: flex-direction: 定义主轴的方向,决定flex容器中的子元素的排列方式 flex-wrap:设置子元素是否换行 flex-flow:是flex-direction和flex-wrap的简写形式,用于设置容器的排…...
swiftui macOS实现加载本地html文件
import SwiftUI import WebKitstruct ContentView: View {var body: some View {VStack {Text("测试")HTMLView(htmlFileName: "localfile") // 假设你的本地 HTML 文件名为 index.html.frame(minWidth: 100, minHeight: 100) // 设置 HTMLView 的最小尺寸…...
科技云报道:大模型加持后,数字人“更像人”了吗?
科技云报道原创。 北京冬奥运AI 虚拟人手语主播、杭州亚运会数字人点火、新华社数字记者、数字航天员小诤…当随着越来越多数字人出现在人们生活中,整个数字人行业也朝着多元化且广泛的应用方向发展,快速拓展到不同行业、不同场景。 面向C端࿰…...
轻松驾驭时间流:MYSQL日期与时间函数的实用技巧
🌈 个人主页:danci_🔥 系列专栏:《MYSQL应用》💪🏻 制定明确可量化的目标,坚持默默的做事。 轻松驾驭时间流:MYSQL日期与时间函数的实用技巧 MYSQL日期时间函数是数据库操作中不可…...
如何在极狐GitLab 使用Docker 仓库功能
本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在[极狐GitLab…...
streamlit 大模型前段界面
结合 langchain 一起使用的工具,可以显示 web 界面 pip install streamlit duckduckgo-search 运行命令 streamlit run D:\Python_project\NLP\大模型学习\test.py import os from dotenv import load_dotenv from langchain_community.llms import Tongyi load…...
K8s 命令行工具
文章目录 K8s 命令行工具kubectl 工具在任意节点使用kubectl方式创建对象命令显示和查找资源更新资源修补资源编辑资源Scale 资源删除资源查看pod信息节点相关操作 K8s 命令行工具 在搭建集群的时候,我们通过yum 下载了kubeadm kubelet kubectl 三个命令行工具&…...
优先级队列
优先级队列的基本使用 模拟实现上面的接口函数,优先级队列不是队列,而是类似一个堆一样的东西,我们先来试试它的接口函数是怎么个样子的。 需要包含的头文件是queue。 #include<iostream> #include<queue> using namespace std;…...
gitlab使用
个人笔记(整理不易,有帮助,收藏点赞评论,爱你们!!!你的支持是我写作的动力) 笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔…...
ppt技巧:如何将Word文档大纲中导入到幻灯片中?
在PowerPoint中,将Word文档的大纲导入到新的幻灯片是一种非常实用的技巧。以下是详细的步骤: 首先,需要打开PowerPoint软件并打开原始的幻灯片文件。 在PowerPoint的顶部【开始】菜单栏中,找到并点击“新建幻灯片”按钮࿰…...
0.开篇:SSM+Spring Boot导学
1. 为什么要使用框架 Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。 几乎当下所有企业级JavaEE开发都离不开SSM(Spring SpringMVC MyBatis)Spring B…...
7、configMap
1、configMap是什么 类似与pod的配置中心,不会因为pod的创建销毁,相关配置发生改变 pod定义硬编码意味着需要有效区分⽣产环境与开发过程中的pod 定义。为了能在多个环境下复⽤pod的定义,需要将配置从pod定义描 述中解耦出来。 2、向容器中…...
【Java面试题】JVM(26道)
文章目录 JVM面试题基础1.什么是JVM?2.JVM的组织架构? 内存管理3.JVM的内存区域是什么?3.1堆3.2方法区3.3程序计数器3.4Java虚拟机栈3.5本地方法栈 4.堆和栈的区别是什么?5.JDK1.6、1.7、1.8内存区域的变化?6.内存泄露…...
(十三)强缓存和协商缓存的区别
一、浏览器的缓存策略 浏览器的缓存策略是指浏览器在加载页面时如何使用和管理缓存机制。可以提高网页加载速度,减轻服务器负载,并提供更好的用户体验。常用的缓存策略有两种:一种是发送请求(协商缓存),一…...
如何创建Windows下google Chrome便携版?
创建google Chrome便携版教程 准备工作: 1,下载GoogleChromePortable启动器 2,下载谷歌浏览器 3,下载7-ZIP 解压提取器 用7zip解压GoogleChromePortable,得到GoogleChromePortable.exe启动器 解压谷歌浏览器 用7…...
rabbitmq安装rabbitmq-delayed-message-exchange插件
下载地址:Community Plugins | RabbitMQ 上传到rabbitmq安装目录的/plugins目录下 我的是/usr/lcoal/rabbitmq/plugins/ 直接安装 [rootk8s-node1 rabbitmq]# rabbitmq-plugins enable rabbitmq_delayed_message_exchange [rootk8s-node1 rabbitmq]# rabbitmq-pl…...
B02、分析GC日志-6.3
1、相关GC日志参数 -verbose:gc 输出gc日志信息,默认输出到标准输出-XX:PrintGC 输出GC日志。类似:-verbose:gc-XX:PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志, 并在进程退出时输出当前内存各区域分配情况-XX:PrintGCTimeStamp…...
Redis中的集群(二)
节点 集群数据结构 redisClient结构和clusterLink结构的相同和不同之处 redisClient结构和clusterLink结构都有自己的套接字描述符和输入、输出缓冲区,这两个结构的区别在于,redisClient结构中的套接字和缓冲区是用于连接客户端的,而clust…...
UVA12538 Version Controlled IDE 题解 crope
Version Controlled IDE 传送门 题面翻译 维护一种数据结构,资磁三种操作。 1.在p位置插入一个字符串s 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 1 ≤ n ≤ 50000 1 \leq n \leq 50000 1≤n≤50000,所…...
OAuth2.0客户端和服务端Java实现
oauth2 引言 读了《设计模式之美》和《凤凰架构》架构安全篇之后,决定写一个OAuth2.0的认证流程的Demo,也算是一个阶段性的总结,具体原理实现见《凤凰架构》(架构安全设计篇)。 涉及到的源码可以从https://github.com/WeiXiao-Hyy/oauth2获…...
物流自动分拣系统激光雷达漫反射板
早在二十世纪六十年代,激光器的诞生为激光雷达技术的发展奠定了基础。随后,激光雷达技术开始应用于各种领域,包括军事、航空、地理勘测等。然而,在物流自动分拣领域,激光雷达的应用相对较晚。 随着物流行业的快速发展和…...
2024 抖音欢笑中国年(三):编辑器技巧与实践
前言 本次春节活动中,我们大部分场景使用内部的 SAR Creator互动方案来实现。 SAR Creator 是一款基于 TypeScript 的高性能、轻量化的互动解决方案,目前支持了Web和字节内部跨端框架平台,服务于字节内部的各种互动业务,包括但不限…...
超低价的郑州网站建设/最近一周的重大新闻
多进程指的是一个程序可以启动多个进程执行,一般模式如下: import multiprocessing from multiprocessing import Process,current_process import time# cup 核数量 num_cpus multiprocessing.cpu_count()def func(x):time.sleep(1)proc current_pro…...
网站建设与管理专业/贵阳做网络推广的公司
题目链接:https://vijos.org/p/1120 这怕是我打过最水的一道题了,但是这道隶属于普及组难度的题我竟然提交4次才过,这不禁让我有些后怕,所以还是含泪写下这篇博客,用来警示一下自己; 这题半天不A的原因还是…...
自己怎么做卡密网站/百度快照的作用是什么
云计算在图书馆领域的应用与研究已陆续展开,图书馆的云时代即将到来。重塑图书馆生存和发展的环境、推动图书馆自身变革是云计算环境下图书馆发展的未来趋势。 云计算是分布式处理(Distributed Computing)、并行处理(Parallel Com…...
做网站怎么加水平线/网络推广公司排名
金三银四找工作旺季,又来给大家送干货了。关于Python后端工程师你了解多少,下面告诉你如何面试Python后端工程师? 文章目录一、Python后端技术栈1.1 Python语言基础1.2 Python框架1.3 数据库1.4 Web1.5 系统二、关于面试自我介绍2.1 面试流程…...
wordpress 媒体管理/中国seo排行榜
目录 0函数对象 实际应用介绍 函数对象超出了普通函数概念,内部可以保持状态 函数对象作为参数传递 1谓词 一元谓词举例: 二元谓词举例: 2内建函数 0函数对象 重载函数调用操作符的类,其对象常被称为函数对象(…...
徐州市网站建设/推广哪个app最挣钱
chmod [权限值] [文件名] 更改文件或目录的使用权限 UNIX 系统对每一个文件或目录都记录有9个权限的属性值,前面3个是“所有者”的“读权限”、“写权限”、“执行权”,接着3个是“同一用户组的人”的“读权限”、“写权限”、“执行权”,最后…...