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
相关产品推荐
相关产品推荐

