Docker 版本 17.06.0-ce
我正在通过观看视频课程来学习 Docker。
讲师展示:
sudo docker run -ti ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)
使用图像 ubuntu 运行 docker。而让我烦恼的是/bin/bash\。
man docker run显示这/bin/bash是一个命令。那就是docker run IMAGE [COMMAND]。好吧,没关系。但是两者有什么区别
sudo docker run -ti ubuntu
Run Code Online (Sandbox Code Playgroud)
和
sudo docker run -ti ubuntu /bin/bash
Run Code Online (Sandbox Code Playgroud)
对我来说没有。而且讲师没有将注意力集中在命令上。他说我们只是运行docker。这是他在课程中的第一个命令。然后他表明我们已经与主机隔离了,我们可以自由地破坏我们想要的东西而没有任何损坏(如rm -rf /bin)。
我检查了:
$ sudo docker run -ti ubuntu
root@aaf7cd26fe18:/# echo $SHELL
/bin/bash
$ sudo docker run -ti ubuntu /bin/bash
root@6b2570958216:/# echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)
好吧,为了我自己,我决定把这/bin/bash部分当作垃圾扔掉。
但无论如何我决定问你:也许这两种运行 Docker 的方式有一些区别?如果有,它是什么样的?
mur*_*uru 17
Docker 镜像可以使用Dockerfile 中的CMD指令指定默认运行某个命令。和:
如果用户
docker run将参数指定为 ,则它们将覆盖 中指定的默认值CMD。
碰巧的是,为Ubuntu Dockerfile指定的默认命令实际上是 bash:
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
因此,对于Ubuntu的图像的具体情况,docker run ... ubuntu /bin/bash从没有什么不同docker run ... ubuntu。
当然,这不必总是如此。默认情况下,数据库引擎的 Dockerfile 可能会运行数据库命令。在这种情况下,如果您需要交互式 shell,则需要执行docker run ... /bin/bash.
通常,您不能假设这docker run会给您一个交互式 shell。指定/bin/bash是否需要 shell 会更安全。
| 归档时间: |
|
| 查看次数: |
73654 次 |
| 最近记录: |