有什么区别shell and exec表格用于
CMD
:
CMD python my_script.py arg
vs.
CMD ["python", "my_script.py", "arg"]
ENTRYPOINT
:
ENTRYPOINT ./bin/main
vs.
ENTRYPOINT ["./bin/main"]
and RUN
:
RUN npm start
vs.
RUN ["npm", "start"]
Dockerfile
指示?
shell 形式和 exec 形式之间有两个区别。根据文档 https://docs.docker.com/engine/reference/builder/#run,exec 形式是首选形式。这是两个区别:
exec 形式被解析为 JSON 数组,这意味着您必须在单词周围使用双引号 (“),而不是单引号 (‘)。
与 shell 形式不同,exec 形式不调用命令 shell。这意味着不会发生正常的 shell 处理。例如,CMD [ "echo", "$HOME" ] 不会对 $HOME 进行变量替换。如果您想要 shell 处理,则可以使用 shell 形式或直接执行 shell,例如:CMD [ "sh", "-c", "echo $HOME" ]。当使用 exec 形式并直接执行 shell 时,就像 shell 形式一样,是 shell 进行环境变量扩展,而不是 docker。
这里的一些额外的微妙之处是:
exec 形式可以避免 shell 字符串修改,并使用不包含指定 shell 可执行文件的基本映像来运行命令。
在 shell 形式中,您可以使用 \(反斜杠)将单个 RUN 指令继续到下一行。
还有第三种形式CMD https://docs.docker.com/engine/reference/builder/#cmd:
CMD ["param1","param2"] (作为 ENTRYPOINT 的默认参数)
此外,还需要 exec 表单CMD
如果您将其用作参数/参数ENTRYPOINT
打算被覆盖。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)