https://docs.docker.com/engine/reference/builder/#cmd在Dockerfile中说
CMD ["executable","param1","param2"]
是'exec form'和
CMD command param1 param2
是'shell形式',它们的运行方式略有不同。
注意:与shell表单不同,exec表单不会调用命令shell
但是当您使用docker run
传递命令时,我可以找到任何方法使其在没有命令shell的情况下运行。
docker run container-name echo test # shell form I guess
执行形式是什么?
答案 0 :(得分:0)
为什么要猜测?只是检查。
docker run ubuntu sh -c 'echo "Hello world!"'
创建一个可以用docker container ls -a
发现的容器
并按id检查。
检查命令显示,除了显式命令外,没有添加 sh -c :
"Cmd": [
"sh",
"-c",
"echo \"Hello world!\""
],
因此,当前的假设是它使用 exec形式。
只需提及:我对docker-compose run
的测试显示了相同的结果。
这对docker和docker-compose的记录都很少,这是事实。 --entrypoint
选项有点幸运,在dockerfile docs中有说明:
您可以使用--entrypoint覆盖ENTRYPOINT设置,但这只能将二进制文件设置为exec(将不使用sh -c)。