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

Jenkins中Docker Build时apt-get install失败求助

Jenkins中Docker构建DNS解析失败问题排查与解决

从你给出的错误日志来看,核心问题是Docker容器内部无法解析security.debian.org和deb.debian.org这些域名,导致apt-get update失败。本地构建正常但Jenkins里失败,通常是Jenkins所在环境的Docker DNS配置和本地不一致导致的,给你几个可行的解决方案:

1. 全局配置Docker Daemon的DNS服务器

这是最彻底的方法,让所有Docker容器默认使用可靠的DNS服务器:

  • 编辑Docker守护进程配置文件(如果不存在就新建):
    vi /etc/docker/daemon.json
    
  • 添加以下内容:
    {
      "dns": ["8.8.8.8", "8.8.4.4"]
    }
    
  • 重启Docker服务使配置生效:
    systemctl restart docker
    

之后再执行Jenkins构建,容器会自动使用这个DNS配置,不需要在Dockerfile里手动修改resolv.conf。

2. 修改Dockerfile里的DNS配置方式

你的Dockerfile里修改resolv.conf的方式被systemd-resolved覆盖了,因为镜像里的/etc/resolv.conf是个软链接。可以改成直接替换为静态文件:

# 替换原有的Step3和Step4
RUN rm -f /etc/resolv.conf && echo "nameserver 8.8.8.8" > /etc/resolv.conf
RUN cat /etc/resolv.conf

这样容器里的resolv.conf就变成静态文件,不会被systemd-resolved动态修改,后续的apt-get update就能正常解析域名了。

3. 检查Jenkins节点的网络环境

如果Jenkins使用了代理节点,需要确认:

  • 节点服务器本身能正常解析deb.debian.org等域名(可以在节点上执行ping deb.debian.org测试)
  • 节点没有被防火墙、代理服务器拦截外网请求
  • 如果有代理,需要在Dockerfile里配置APT代理,比如:
    RUN echo 'Acquire::http::Proxy "http://your-proxy-ip:port/";' > /etc/apt/apt.conf.d/proxy.conf
    

为什么本地构建正常?

本地Docker Daemon的DNS配置可能默认已经使用了能正常解析外网的服务器,或者你的本地网络环境没有限制,而Jenkins所在服务器的Docker默认DNS配置有问题(比如用了内网DNS,无法解析外网域名),所以才会出现本地正常、Jenkins失败的差异。

内容的提问来源于stack exchange,提问作者goku736

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:47:48