如何在CentOS 8 Docker容器中运行cut等缺失的系统命令?
解决方案
安装对应包获取缺失命令
CentOS 8最小化镜像默认裁剪了绝大多数非核心系统工具,所有缺失的命令都可以通过安装对应软件包实现:
clear命令属于ncurses包,安装命令:dnf install -y ncursescut命令属于coreutils包,若缺失执行:dnf install -y coreutilssystemctl命令属于systemd包,需注意Docker容器默认不启动systemd作为1号进程,仅安装包无法直接使用,若必须使用systemctl,启动容器时需要添加--privileged参数并指定入口为/usr/sbin/init。
如果不知道某条命令对应的安装包,可执行dnf provides */[命令名]搜索匹配的包,比如搜索clear对应的包就执行dnf provides */clear。
注意:CentOS 8 官方已经停止维护,默认源已下线,安装包前需要先执行以下命令修复源:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
非最小化CentOS镜像说明
官方没有提供包含全部命令的CentOS镜像,全量系统工具对应的软件包总大小超过几十GB,不符合容器轻量的设计原则。
如果不想每次启动容器都手动安装工具,可以自行基于官方最小镜像构建自定义镜像,提前预装所需的所有工具,参考Dockerfile如下:
FROM centos:8 # 修复CentOS 8下线源问题 RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \ sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* && \ # 安装常用工具 dnf install -y ncurses coreutils systemd vim wget net-tools && \ # 清理缓存减小镜像体积 dnf clean all
内容的提问来源于stack exchange,提问作者user7693832
相关产品推荐
相关产品推荐

