Docker构建Ubuntu容器时无法解析archive.ubuntu.com域名导致构建失败
看起来你遇到了Docker构建过程中DNS解析失败的棘手问题,直接导致apt没法访问Ubuntu官方源,进而卡在安装wget这一步没法继续。我来帮你梳理几个可行的排查和解决方向:
核心问题定位
从你给出的错误日志能明确看到,容器内部无法解析archive.ubuntu.com和security.ubuntu.com这两个域名,这是所有后续安装失败的根源:
#0 56.42 Err:1 http://archive.ubuntu.com/ubuntu focal InRelease
#0 56.42 Temporary failure resolving 'archive.ubuntu.com'
解决思路与步骤
确认Docker全局DNS配置生效
你提到已经检查了daemon.json,但要确保配置格式正确且Docker服务已重启。通常/etc/docker/daemon.json的DNS配置应该是这样的:{ "dns": ["8.8.8.8", "8.8.4.4"] }修改完成后执行
sudo systemctl restart docker重启Docker服务,再重新尝试构建镜像。临时在Dockerfile中指定DNS
如果不想修改全局配置,可以在Dockerfile的FROM指令后添加一行,强制容器使用公共DNS服务器:FROM ubuntu:20.04 RUN echo "nameserver 8.8.8.8" > /etc/resolv.conf # 后续的RUN命令保持不变这样后续的apt命令就能正常解析域名了。
检查宿主机的网络与DNS状态
先在宿主机上测试域名解析:nslookup archive.ubuntu.com,如果宿主机也无法解析,那问题出在宿主机的网络配置上,先修复宿主机的DNS(比如修改/etc/resolv.conf添加公共DNS);如果宿主机能正常解析,那大概率是Docker自身的网络栈出现了异常。尝试使用宿主机网络构建
在构建命令中加上--network host参数,让容器直接复用宿主机的网络配置,绕开Docker的内部DNS:docker build --network host -t your-image-name .排查防火墙或代理干扰
如果宿主机开启了防火墙(比如ufw),可以暂时关闭测试:sudo ufw disable;如果有全局代理,要确保Docker容器能正确继承代理配置,或者暂时关闭代理再尝试构建。
另外你提到浏览器访问archive.ubuntu.com也有异常,这说明你的宿主机网络本身可能存在连通性问题,建议先解决宿主机的网络访问问题,再回来处理Docker构建的问题。
备注:内容来源于stack exchange,提问作者adastra

