Linux 在Docker Alpine容器中启动外壳
要启动Ubuntu映像的交互式shell,我们可以运行:Linux 在Docker Alpine容器中启动外壳,linux,docker,containers,alpine,Linux,Docker,Containers,Alpine,要启动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 但当为运行时,会出现以下结果: ole@T:~$ docker run -it --rm alpine Error
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
但当为运行时,会出现以下结果:
ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified
在Alpine base容器中启动交互式shell的命令是什么
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / #
上面使用的选项:
是BusyBox提供的ash()/bin/ash
在容器退出时自动移除容器(--rm
)docker run--help
交互模式(即使未连接,也保持STDIN打开)-i
分配一个伪TTY-t
bash
,您可以使用/bin/ash
、/bin/sh
、ash
或仅使用sh
/垃圾箱/灰烬
docker run -it --rm alpine /bin/ash
/垃圾箱/垃圾箱
docker run -it --rm alpine /bin/sh
灰烬
嘘
我希望这些信息对您有所帮助。现在,默认情况下,Alpine Image将直接引导到
/bin/sh
,而无需指定要执行的shell:
$ sudo docker run -it --rm alpine
/ # echo $0
/bin/sh
这是因为alpine
image Dockerfiles现在包含一个命令,指定容器启动时要执行的shell:CMD[“/bin/sh”]
在较旧的Alpine图像版本(2017年之前)中,未使用CMD命令,因为Docker用于为CMD创建附加层,这导致图像大小增加。这是阿尔卑斯山图像开发者想要避免的事情。在最新的Docker版本(1.10+)中,CMD不再占用图层,因此它被添加到alpine
图像中。因此,只要未覆盖CMD,最近的Alpine映像将引导到/bin/sh
如需参考,请参阅Glider Labs对官方阿尔卑斯码头文件的以下承诺:如果容器已在运行:
docker exec -it container_id_or_name ash
当然-好主意-ash是shell,-rm在运行完成后移除容器。因此,如果希望容器在运行后仍然可用,请跳过使用--rm。我之所以使用它,是因为我只是在试验ATM。那么如何使用像ubuntu这样的分离属性来运行它呢?我相信在这两种情况下。。。乌班图或阿尔卑斯山。。。您只需给它一个
-d
选项。+1用于注意Alpine有ash
而不是bash
,这是因为我对Alpine不太熟悉,所以我无法更早地访问容器。如果您在RHEL上,并且出现权限被拒绝错误,则再次使用SELinux。。。必须临时执行设置强制0:p/bin/ash
和ash
之间的区别是什么?类似于/bin/sh
和sh
.Hi@peter mortensen,区别在于ash
只是指向/bin/ash
的符号链接。一些linux发行版没有符号链接。
$ sudo docker run -it --rm alpine
/ # echo $0
/bin/sh
docker exec -it container_id_or_name ash