-c是什么意思?

时间:2014-12-24 05:21:53

标签: docker boot2docker

  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会做什么?

3 个答案:

答案 0 :(得分:2)

来自the bash manual page

  

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"来查看发生了什么。