使用docker run以'exec form'传入命令

时间:2017-09-26 15:48:22

标签: docker

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

执行形式是什么?

1 个答案:

答案 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的测试显示了相同的结果。

这对dockerdocker-compose的记录都很少,这是事实。 --entrypoint选项有点幸运,在dockerfile docs中有说明:

您可以使用--entrypoint覆盖ENTRYPOINT设置,但这只能将二进制文件设置为exec(将不使用sh -c)。