Starting a shell in the Docker Alpine container
要为Ubuntu映像启动交互式shell,我们可以运行:
1 2 3 | 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 |
但是,当为Alpine Docker映像运行此命令时,将得到以下结果:
1 2 | ole@T:~$ docker run -it --rm alpine Error response from daemon: No command specified |
在Alpine基本容器中启动交互式Shell的命令是什么?
1 2 | ole@T:~$ docker run -it --rm alpine /bin/ash (inside container) / # |
上面使用的选项:
-
/bin/ash 是由BusyBox提供的Ash(Almquist Shell) -
--rm 退出时自动删除容器(docker run --help ) -
-i 交互模式(即使未连接也保持STDIN打开) -
-t 分配伪TTY
通常,Alpine Linux映像不包含
/ bin /灰
1 | docker run -it --rm alpine /bin/ash |
/ bin / sh
1 | docker run -it --rm alpine /bin/sh |
灰
1 | docker run -it --rm alpine ash |
SH
1 | docker run -it --rm alpine sh |
希望这些信息对您有所帮助。
如今,默认情况下,Alpine映像将直接引导到
1 2 3 | $ sudo docker run -it --rm alpine / # echo $0 /bin/sh |
这是因为
在较旧的Alpine映像版本(2017之前)中,未使用CMD命令,因为Docker曾为CMD创建一个额外的层,这导致映像大小增加。这是Alpine图片开发人员想要避免的事情。在最新的Docker版本(1.10+)中,CMD不再占据一层,因此将其添加到
作为参考,请参阅以下由Glider Labs对官方Alpine Dockerfile的提交:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b
如果容器已经在运行:
1 | docker exec -it container_id_or_name ash |