在Docker ubi-minimal镜像中用microdnf安装shadow-utils失败求助
问题
构建Dockerfile时触发如下报错:
The command '/bin/sh -c microdnf -y install shadow-utils' returned a non-zero code: 1 Execution failed for task
对应的Dockerfile代码:
FROM docker.xxx.com/ubi8/ubi-minimal ARG DISTRIB_DIRECTORY LABEL Team="xxx" COPY ${DISTRIB_DIRECTORY} /usr/app/ RUN rm -fr /etc/yum.repos.d/* && curl xxx.net/scripts/add-ubi8-repo.sh | sh RUN microdnf -y install shadow-utils RUN microdnf -y install --nodocs java-11-openjdk-headless tzdata-java && microdnf clean all RUN groupadd --gid 1001 mygroup RUN useradd --uid 1001 --gid mygroup --shell /bin/bash --home-dir /usr/app --no-create-home myuser RUN chown -R myuser:mygroup /usr/app RUN chmod -R u+rwx /usr/app USER myuser EXPOSE 8080 ENTRYPOINT ["/usr/app/bin/docker-entrypoint.sh"] CMD ["xxx.jar"]
删除RUN microdnf -y install shadow-utils行后,后续的microdnf安装命令仍报相同错误。
报错原因
核心问题是自定义仓库配置步骤失效,导致microdnf找不到可用软件源:
- 先执行
rm -fr /etc/yum.repos.d/*清空了所有默认仓库配置 - 随后通过
curl xxx.net/scripts/add-ubi8-repo.sh | sh尝试添加自定义仓库,但该脚本大概率执行失败(比如网络无法访问目标域名、脚本文件不存在、脚本执行逻辑出错) - 此时系统没有任何可用的软件仓库,所有microdnf安装命令都会因无法定位安装包而返回非零错误码
解决方法
可以从以下几个方向排查修复:
- 验证自定义仓库脚本可用性:
- 在本地终端执行
curl xxx.net/scripts/add-ubi8-repo.sh,确认能正常获取脚本内容 - 手动运行脚本内容,检查是否能在
/etc/yum.repos.d/目录下生成有效的repo配置文件
- 在本地终端执行
- 临时用默认仓库调试:
注释掉rm -fr /etc/yum.repos.d/* && curl xxx.net/scripts/add-ubi8-repo.sh | sh这一行,直接用ubi8-minimal自带的仓库执行microdnf安装。如果能成功,说明自定义仓库脚本存在问题 - 检查网络连通性:
构建时确保容器能访问xxx.net,可以在Dockerfile中临时添加RUN ping -c 3 xxx.net命令验证网络是否通畅 - 合并命令并增加错误捕获:
将仓库替换和安装命令合并,同时给curl加上-f参数(请求失败时直接返回非零码终止构建),方便快速定位问题:RUN rm -fr /etc/yum.repos.d/* \ && curl -f xxx.net/scripts/add-ubi8-repo.sh | sh \ && microdnf -y install shadow-utils java-11-openjdk-headless tzdata-java \ && microdnf clean all
内容的提问来源于stack exchange,提问作者Stitch
相关产品推荐
相关产品推荐

