在Docker Alpine容器中启动shell

问题描述 投票:100回答:3

要为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的命令是什么?

linux docker containers alpine
3个回答
212
投票
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

54
投票

通常,Alpine Linux图像不包含bash,而是可以使用/bin/ash/bin/shash或仅使用sh

/斌/灰

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

我希望这些信息对您有所帮助。


14
投票

如今,Alpine图像默认会直接启动到/bin/sh,而不必指定要执行的shell:

$ sudo docker run -it --rm alpine  
/ # echo $0  
/bin/sh  

这是因为alpine图像Dockerfiles现在包含一个CMD命令,它指定容器启动时要执行的shell:CMD ["/bin/sh"]

在较早的Alpine图像版本(2017年之前)中,未使用CMD命令,因为Docker用于为CMD创建附加层,导致图像大小增加。这是Alpine图像开发人员想要避免的。在最近的Docker版本(1.10 +)中,CMD不再占用一个层,因此它被添加到alpine图像中。因此,只要不覆盖CMD,最近的Alpine图像将启动到/bin/sh

供参考,请参阅Glider Labs对官方Alpine Dockerfiles的以下提交: https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b

© www.soinside.com 2019 - 2024. All rights reserved.