第七节:Docker 容器中系统若为Alpine Linux 为什么会出现“docker exec -it <ID> bash 失败 docker exec -it <ID>ash成功“

准备:

接第六节、Docker 方式部署指南 github 上项目 mkdocs-material
布置的结果如下:
在这里插入图片描述
使用浏览器浏览:
在这里插入图片描述
在宝塔面板上进入镜像为squidfunk/mkdocs-material 容器名mkdocs-wcowin的容器,你发现若你使用 bash 根本进入不了容器,见下图。
在这里插入图片描述
在这里插入图片描述
若使用命令行方式进入容器,会出现“OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown”提示,见下图
在这里插入图片描述

故障原因

在 Alpine Linux 的容器中,出现 docker exec -it 08972fa79cc6 bash 失败而 docker exec -it 08972fa79cc6 ash 成功的情况,是因为 Alpine Linux 默认使用的 shell 是 ash 而不是 bash,并且其基础镜像中通常没有预装 bash。以下是具体说明:

Alpine Linux 的默认 Shell

Alpine Linux 为了保持系统的精简和高效,采用了 ash 作为默认的 shell。ash 是一个小巧、快速的 shell,能够满足大多数基本的命令行操作需求,非常适合在资源受限的环境中使用。因此,当你尝试执行 docker exec -it 08972fa79cc6 ash 时,能够成功进入容器的 shell 环境。

未预装 bash 的原因

Alpine Linux 的设计理念是尽可能地减少不必要的软件包和依赖,以降低系统的存储空间和内存占用。由于 bash 相对 ash 来说体积较大,且对于基本的系统操作和大多数应用场景来说,ash 已经足够使用,所以在 Alpine Linux 的基础镜像中通常不会预装 bash。这就导致了执行 docker exec -it 08972fa79cc6 bash 时会失败,并提示找不到可执行文件。

安装 bash 的方法

如果你确实需要在 Alpine Linux 的容器中使用 bash,可以通过在 Docker 中添加指令来安装 bash:
首先使用命令进入容器

docker exec -it 08972fa79cc6 /bin/ash

在这里插入图片描述

解决官方源的方法:

这时你想通过升级的办法安装 bash shell,你会发现升级不了,不能升级的原因是系统用的官方源不可用,要换成国内的阿里源,下面我们看看如何换成阿里源
Alpine Linux 的容器中使用阿里源
在 Alpine Linux 的容器中使用阿里源可以加快软件包的下载速度,以下是具体的操作步骤:

备份原有的源文件
在修改源之前,先备份原有的源文件是一个良好的习惯,以便在需要时可以恢复。在 Alpine Linux 容器中,可以使用以下命令备份 /etc/apk/repositories 文件:

cp /etc/apk/repositories /etc/apk/repositories.bak

修改源文件
使用文本编辑器打开 /etc/apk/repositories 文件,例如使用 vi 编辑器:
vi /etc/apk/repositories
将文件中的内容替换为以下阿里源地址:

http://mirrors.aliyun.com/alpine/v3.19/main
http://mirrors.aliyun.com/alpine/v3.19/community

(阿里云镜像源地址:https://mirrors.aliyun.com/alpine/,下载时要根据你的系统版本号下载对应的镜像源,这一点不要搞错了。)
上述源地址中的 v3.19 是 Alpine Linux 的版本号,你需要根据你所使用的 Alpine Linux 容器的实际版本进行修改。如果你不确定版本号,可以通过 cat /etc/alpine-release 命令查看。
更新软件包索引
修改完源文件后,需要更新软件包索引,以便能够使用新的源来查找和安装软件包。在容器中执行以下命令:

apk update

执行该命令后,容器会从新配置的阿里源下载软件包索引文件,之后就可以使用 apk add 命令通过阿里源来安装软件包了,例如安装 bash:

apk add --no-cache bash

验证源是否生效
可以通过安装一个软件包来验证阿里源是否生效。如上述安装 bash 时,查看下载进度和安装速度,如果速度明显加快,并且能够成功安装,说明阿里源已经配置成功并正常工作。

使用阿里源可以有效提高在 Alpine Linux 容器中安装软件包的效率,但需要注意的是,要根据容器内的 Alpine Linux 版本选择正确的源地址,以确保能够获取到与版本匹配的软件包。

在 Alpine Linux 中成功安装 bash

安装 bash 很容易,但这并不意味着 busybox 的命令符不见了。语法如下:

# apk update
# apk upgrade
# apk add bash

在这里插入图片描述
在这里插入图片描述

验证 bash 安装成功

退出容器,使用如下命令再次进入容器

docker exec -it 08972fa79cc6 /bin/bash

在这里插入图片描述
从上图可以看出 Docker 容器中系统为 Alpine Linux 的 bash 安装成功,
需要将 root shell 更改为 bash,请输入:

# vi /etc/passwd

查找用户名和默认 shell,比如 /bin/ash:

root:x:0:0:root:/root:/bin/ash

然后用 /bin/bash 替换:

root:x:0:0:root:/root:/bin/bash

在这里插入图片描述
以上是我做Docker 容器中系统若为Alpine Linux 的一点体会,写出来供大家欣赏。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔极客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值