准备:
接第六节、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 的一点体会,写出来供大家欣赏。

1110

被折叠的 条评论
为什么被折叠?



