要为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
但是当Alpine Docker image运行时,会产生以下结果:
ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified
在Alpine基础容器中启动交互式shell的命令是什么?
答案 0 :(得分:189)
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / #
上面使用的选项:
/bin/ash
是由BusyBox --rm
退出时自动删除容器(docker run --help
)-i
交互模式(即使未附加也保持STDIN打开)-t
分配伪TTY 答案 1 :(得分:48)
通常,Alpine Linux图像不包含bash
,而是可以使用/bin/ash
,/bin/sh
,ash
或sh
。
/ bin中/灰
docker run -it --rm alpine /bin/ash
/ bin / sh的
docker run -it --rm alpine /bin/sh
灰
docker run -it --rm alpine ash
SH
docker run -it --rm alpine sh
我希望这些信息可以帮到你。
答案 2 :(得分:12)
如果容器已经在运行:
docker exec -it container_id_or_name ash
答案 3 :(得分:10)
如今,默认情况下,Alpine映像将直接启动到/bin/sh
中,而无需指定要执行的Shell:
$ sudo docker run -it --rm alpine
/ # echo $0
/bin/sh
这是因为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