博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CMD和ENTRYPOINT
阅读量:5796 次
发布时间:2019-06-18

本文共 1227 字,大约阅读时间需要 4 分钟。

hot3.png

CMD

CMD指令有三种形式:

  • CMD ["executable","param1","param2"] (exec形式,这是优先形式)
  • CMD ["param1","param2"] (作为ENTRYPOINT的默认参数)
  • CMD command param1 param2 (shell 形式)

Dockerfile中只能有一条CMD指令。如果存在多个CMD,那么只有最后一个CMD才会生效。

CMD的主要目的是为正在执行的容器提供默认值。这些默认值可以包括可执行文件,也可以省略可执行文件。省略可执行文件时必须指定ENTRYPOINT指令。

备注:如果CMD用于为ENTRYPOINT指令提供默认参数,则CMD和ENTRYPOINT指令都应该使用JSON数组格式指定。

备注:exec形式会被解析为JSON数组,这意味着必须对单词使用双引号,而不是单引号。

备注:与shell形式不同,exec形式不调用命令shell。这意味着正常的shell处理不会生效。例如,CMD ["echo", "$HOME"]不会对$HOME执行变量替换。如果想要shell处理生效,要么使用shell形式,要么直接执行shell,例如:CMD [ "sh", "-c", "echo $HOME" ]。当使用exec形式并直接执行shell时,就像shell形式一样,执行环境变量扩展的是shell,而不是docker。

在使用shell或exec格式时,CMD设置了运行镜像时要执行的命令。

如果使用CMD的shell形式,那么<命令>将在/bin/sh -c中执行:

FROM ubuntuCMD echo "This is a test." | wc -

如果不想在shell的形式下运行<command>,那么必须将该命令表示为JSON数组,并给出可执行文件的完整路径。建议优先使用CMD命令的数组形式。任何额外的参数必须单独表示为数组中的字符串:

FROM ubuntuCMD ["/usr/bin/wc","--help"]

如果希望容器每次运行相同的可执行文件,那么应该考虑将ENTRYPOINT与CMD结合使用。

如果用户指定docker run的参数,那么CMD中指定的默认值将被run的参数覆盖。

备注:不要将RUN与CMD混淆。RUN实际运行一个命令并提交结果;CMD在构建时不执行任何操作,但为镜像指定预期的命令。

ENTRYPOINT

ENTRYPOINT有两种形式:

  • ENTRYPOINT ["executable", "param1", "param2"] (exec 形式,这是优先形式)
  • ENTRYPOINT command param1 param2 (shell 形式)

ENTRYPOINT允许您配置将作为可执行文件运行的容器。

 

转载于:https://my.oschina.net/jennerlo/blog/3016956

你可能感兴趣的文章
jQuery设置同步调用接口
查看>>
Oracle参数Arraysize设置对于逻辑读的影响分析
查看>>
Mac Finder小技巧。
查看>>
错误 error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值...
查看>>
CCNP学习笔记6——OSPF
查看>>
CentOS 6.3 NFS的安装配置、启动及mount挂载方法
查看>>
年轻人如何理财
查看>>
文章分享 如何成为php高手
查看>>
httpd服务详解及基于openssl的使用
查看>>
网线水晶头接法
查看>>
day19-URL+视图+模板+ORM
查看>>
【rabbitmq】的基础
查看>>
SpringBoot 学习一:Hello world
查看>>
向天再借五百年?科学家找到延寿新方法!
查看>>
myecplise 6.6 代码自动提示
查看>>
ThreadLocal 简单理解
查看>>
11个显著提升 ASP.NET 应用程序性能的技巧——第1部分
查看>>
3.[Think in Java笔记]持有对象
查看>>
57,rpm工具的使用方式
查看>>
跨域问题解决方案
查看>>