千家信息网

Dockerfile中CMD和ENTRYPOINT指令有什么用

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要为大家展示了"Dockerfile中CMD和ENTRYPOINT指令有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Dockerfile
千家信息网最后更新 2025年12月03日Dockerfile中CMD和ENTRYPOINT指令有什么用

这篇文章主要为大家展示了"Dockerfile中CMD和ENTRYPOINT指令有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Dockerfile中CMD和ENTRYPOINT指令有什么用"这篇文章吧。

Dockerfile 用于自动化构建一个docker镜像。Dockerfile里有 CMD 与 ENTRYPOINT 两个指令,其功能有些许相似,这里做一下说明:

一: CMD指令

The main purpose of a CMD is to provide defaults for an executing container.

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指定参数。

第三种用法(shell form):是以"/bin/sh -c"的方法执行的命令。

例如:

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

就不会输出:this is a echo test,因为CMD命令被"/bin/bash"覆盖了。

二:ENTRYPOINT命令 

An ENTRYPOINT allows you to configure a container that will run as an executable.

它可以让你的容器功能表现得像一个可执行程序一样。

例子一:

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):

docker run -it st /etc/fstab
这样相当: /bin/cat /etc/fstab 这个命令的作用。运行之后就输出/etc/fstab里的内容。

ENTRYPOINT有两种写法:

写法一:

ENTRYPOINT ["executable", "param1", "param2"] (the preferred exec form)

写法二:

ENTRYPOINT command param1 param2 (shell form)

你也可以在docker run 命令时使用-entrypoint指定(但是只能用写法一)。

下面是我把ENTRYPOINT设为["/bin/sh -c"]时候运行的情况:

docker run -it t2 /bin/bash
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里面。

例如:

FROM ubuntu:14.10
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

把可能需要变动的参数写到CMD里面。然后你可以在docker run里指定参数,这样CMD里的参数(这里是-c)就会被覆盖掉而ENTRYPOINT里的不被覆盖。

以上是"Dockerfile中CMD和ENTRYPOINT指令有什么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

参数 命令 镜像 运行 指令 容器 内容 写法 功能 输出 只是 程序 篇文章 变动 例子 时候 进程 学习 帮助 相似 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华为云数据库专场 服务器管理器添加远程 福建企业软件开发系统 软件开发进度控制具体措施 网页实现数据库搜索 云服务器自动化助手 软件开发在长沙好找工作吗 深圳市悦茗堂互联网科技有限公司 枣庄ios软件开发系统 php数据库读写分离概念 常用的电子图书数据库 幼儿园安全第一课网络安全 数据库大作业毕业生招聘网站 博彩软件开发找谁 计算机三级网络技术上机模拟 昆明智能化软件开发价格信息 云平台软件开发基础 数据库不允许保存 网络病毒对网络安全的重大影响 鸿翔网络技术有限公司 二手游戏服务器 网络安全宣传授课开场白 外网访问公司内网服务器上的软件 如何彻底卸载u8数据库 艾默海尔能源网络技术有限公司 sql数据库找用户名和密码 联想服务器济南代理商 网络安全红蓝队攻防演练新闻 如何将核心代码放到服务器 数据库专用血样袋做什么的
0