Ole*_*Ole 131 linux containers docker alpine-linux
要为Ubuntu映像启动交互式shell,我们可以运行:
ole@T:~$ docker run -it --rm ubuntu
root@1a6721e1fb64:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Run Code Online (Sandbox Code Playgroud)
但是当为Alpine Docker镜像运行时,会产生以下结果:
ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified
Run Code Online (Sandbox Code Playgroud)
在Alpine基础容器中启动交互式shell的命令是什么?
Ole*_*Ole 233
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / #
Run Code Online (Sandbox Code Playgroud)
上面使用的选项:
/bin/ash是Ash(Almquist Shell)由BusyBox提供--rm退出时自动删除容器(docker run --help)-i 交互模式(即使没有附加也保持STDIN打开)-t 分配伪TTYjan*_*hez 57
通常情况下,高山Linux映像不包含bash,相反,你可以使用/bin/ash,/bin/sh,ash或只sh.
/斌/灰
docker run -it --rm alpine /bin/ash
Run Code Online (Sandbox Code Playgroud)
/ bin/sh的
docker run -it --rm alpine /bin/sh
Run Code Online (Sandbox Code Playgroud)
灰
docker run -it --rm alpine ash
Run Code Online (Sandbox Code Playgroud)
SH
docker run -it --rm alpine sh
Run Code Online (Sandbox Code Playgroud)
我希望这些信息对您有所帮助.
val*_*ano 20
如今,/bin/sh默认情况下,Alpine映像将直接启动,而无需指定要执行的shell:
$ sudo docker run -it --rm alpine
/ # echo $0
/bin/sh
Run Code Online (Sandbox Code Playgroud)
这是因为alpine镜像Dockerfile现在包含一个CMD命令,该命令指定了在容器启动时要执行的shell : CMD ["/bin/sh"]。
在较旧的Alpine映像版本(2017之前)中,未使用CMD命令,因为Docker曾为CMD创建一个额外的层,这导致映像大小增加。这是Alpine图片开发人员想要避免的事情。在最新的Docker版本(1.10+)中,CMD不再占据一层,因此已将其添加到alpine映像中。因此,只要不覆盖CMD,最近的Alpine映像都将启动/bin/sh。
作为参考,请参阅Glider Labs对官方Alpine Dockerfile的以下承诺:https :
//github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b
| 归档时间: |
|
| 查看次数: |
111004 次 |
| 最近记录: |