docker run -d ubuntu:14.04 /bin/bash -c "while true; do echo hello world;done"
docker run -d ubuntu:14.04 /bin/bash "while true; do echo hello world; done"
我试过了两个。
在案例2中,容器立即停止。所以docker ps
没有结果。 docker ps -a
会产生结果。
在案例1中,docker ps
列出了容器。它没有停止。
那么-c flag会做什么?
答案 0 :(得分:2)
bash在调用时解释以下选项:
-c string
如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。
如果没有-c
,则"while true..."
字符串将被视为要打开的bash
的文件名。
答案 1 :(得分:2)
-c
标志告诉Bash下一个参数是要运行的命令字符串而不是脚本的文件名。在第一种情况下,Bash在-c
之后执行下一个参数。在第二种情况下,如果没有传递-c
标志,Bash会尝试运行一个名为while true; do echo hello world; done
的脚本,但无法找到该脚本,因此它会退出。
来自man bash:
-c 字符串
如果存在 -c 选项,则从 string 中读取命令。如果在字符串之后有参数,则会将它们分配给位置参数,从 $ 0 开始。
答案 2 :(得分:0)
在这种情况下(docker run -d ubuntu:14.04 /bin/bash -c "while true; do echo hello world;done"
),
你已经使用Docker CMD运行了docker值:
/bin/bash -c "while true; do echo hello world;done"
-c
是/bin/bash
的参数,不是docker
的参数。
你可以在docker外面运行/bin/bash -c "while true; do echo hello world;done"
来查看发生了什么。