在 Docker Alpine 容器中启动 shell
Starting a shell in the Docker Alpine container
要为 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 的命令是什么?
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 图像不包含 bash
,您可以使用 /bin/ash
、/bin/sh
、ash
或仅 sh
.
/bin/ash
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
希望这些信息对您有所帮助。
如今,默认情况下,Alpine 映像将直接启动到 /bin/sh
,而无需指定 shell 来执行:
$ sudo docker run -it --rm alpine
/ # echo [=10=]
/bin/sh
这是因为 alpine
图像 Docker 文件现在包含一个 CMD
命令,指定 shell 在容器启动时执行:CMD ["/bin/sh"]
.
在较旧的 Alpine 镜像版本(2017 年之前)中,未使用 CMD 命令,因为 Docker 用于为 CMD 创建附加层,导致图像大小增加。这是 Alpine 图像开发人员想要避免的事情。在最近的 Docker 版本(1.10+)中,CMD 不再占据一层,因此它被添加到 alpine
图像中。因此,只要不覆盖 CMD,最近的 Alpine 映像将引导至 /bin/sh
.
作为参考,请参阅 Glider Labs 对官方 Alpine Docker 文件的以下提交:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b
如果容器已经是 运行:
docker exec -it container_id_or_name ash
要为 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 的命令是什么?
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 图像不包含 bash
,您可以使用 /bin/ash
、/bin/sh
、ash
或仅 sh
.
/bin/ash
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
希望这些信息对您有所帮助。
如今,默认情况下,Alpine 映像将直接启动到 /bin/sh
,而无需指定 shell 来执行:
$ sudo docker run -it --rm alpine
/ # echo [=10=]
/bin/sh
这是因为 alpine
图像 Docker 文件现在包含一个 CMD
命令,指定 shell 在容器启动时执行:CMD ["/bin/sh"]
.
在较旧的 Alpine 镜像版本(2017 年之前)中,未使用 CMD 命令,因为 Docker 用于为 CMD 创建附加层,导致图像大小增加。这是 Alpine 图像开发人员想要避免的事情。在最近的 Docker 版本(1.10+)中,CMD 不再占据一层,因此它被添加到 alpine
图像中。因此,只要不覆盖 CMD,最近的 Alpine 映像将引导至 /bin/sh
.
作为参考,请参阅 Glider Labs 对官方 Alpine Docker 文件的以下提交:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b
如果容器已经是 运行:
docker exec -it container_id_or_name ash