You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于centos:latest构建Docker镜像时yum无法找到pdns相关包如何解决

问题成因
  • 核心错误是安装步骤顺序错误:pdns及其相关组件不在CentOS官方默认的base源中,仅存在于epel源内。你将epel-release和pdns系列包放在同一条yum install命令中执行时,yum在单次事务中不会即时加载刚安装的epel源的元数据,因此无法识别到epel源内的pdns相关包,直接报找不到匹配包的错误。
  • 次要原因是CentOS版本的源可用性问题:CentOS 8已于2021年底停止官方维护,默认的官方镜像源已下线,若你使用的centos:latest指向旧的CentOS 8版本,还会存在base源不可用、无法正常安装更新包的问题,你之前的构建步骤中RUN yum update -y显示为CACHED是复用了本地旧缓存,实际源已经失效。
解决方案

1. 修正Dockerfile安装逻辑

拆分epel源安装、缓存刷新和pdns包安装为两个独立步骤,避免同事务源不加载的问题,推荐使用维护状态更稳定的CentOS 7作为基础镜像,可用的Dockerfile示例如下:

FROM centos:7

# 第一步:更新系统、安装epel源并刷新yum缓存
RUN yum update -y && \
    yum install -y epel-release && \
    yum clean all && \
    yum makecache

# 第二步:安装pdns相关组件及工具
RUN yum install -y pdns pdns-tools pdns-backend-postgresql pdns-backend-sqlite pdns-recursor net-tools bind-utils jq

2. 若坚持使用CentOS 8/Stream版本

需要先替换失效的默认base源为可用的vault源,再执行后续安装步骤,示例Dockerfile如下:

FROM centos:8

# 第一步:替换CentOS 8失效的官方源为vault源
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-* && \
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*

# 第二步:安装epel源并刷新缓存
RUN yum update -y && \
    yum install -y epel-release && \
    yum clean all && \
    yum makecache

# 第三步:安装pdns相关组件及工具
RUN yum install -y pdns pdns-tools pdns-backend-postgresql pdns-backend-sqlite pdns-recursor net-tools bind-utils jq

修改完成后重新执行docker build -t dns_img -f Dockerfile_dns .即可正常构建。

内容的提问来源于stack exchange,提问作者wood.wheels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:06:03