在使用 Docker 或其他容器工具构建镜像时,很多人会遇到网络相关的问题。比如拉取基础镜像失败、包安装超时、依赖下载中断等。这些问题大多不是工具本身有 bug,而是网络环境造成的。
最常见的几种报错
构建过程中出现类似这样的提示很常见:
failed to pull image: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection或者在安装软件包时报错:
Err:1 http://deb.debian.org/debian stable InRelease Temporary failure resolving 'deb.debian.org'这类信息说明构建过程无法正常访问外部网络资源,根本原因通常出在网络配置或外部访问限制上。
检查本地网络连通性
先别急着改配置,确认下你的主机能不能正常上网。比如执行:
ping -c 4 www.baidu.com如果 ping 不通,那问题可能出在本地网络。WiFi 断了、网线松了、公司防火墙拦了都可能导致这种情况。有时候在家能构建,在公司就一直卡住,大概率是网络策略变了。
Docker 的 DNS 设置问题
即使主机能上网,Docker 容器也可能上不了。因为容器用的是独立的网络命名空间,默认可能用了不可达的 DNS 服务器。可以尝试修改 Docker 的 DNS 配置,在 /etc/docker/daemon.json 中加入:
{
"dns": ["8.8.8.8", "114.114.114.114"]
}改完后重启 Docker 服务:sudo systemctl restart docker,再试一次构建。
国内用户建议换镜像源
官方 registry 在国外,国内直连速度慢还容易断。推荐换成国内镜像加速器。比如阿里云就提供个人专属的 Docker 镜像加速地址。配置方法同样是写入 daemon.json:
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}保存后重启 Docker,再构建镜像就会自动走加速通道,成功率高很多。
构建时临时换源更灵活
有些时候只是安装系统包时慢,比如 Ubuntu 的 apt-get update。可以在 Dockerfile 里临时替换为国内源:
FROM ubuntu:20.04
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
RUN apt-get update && apt-get install -y curl这样不用改宿主机配置,也能加快构建速度。
代理环境别忘了设置
如果你在公司内网,需要走代理才能上网,那也得告诉 Docker。可以通过启动参数传入:
docker build --build-arg HTTP_PROXY=http://proxy.company.com:8080 \
--build-arg HTTPS_PROXY=http://proxy.company.com:8080 \
-t myapp .同时在 Dockerfile 里接收参数:
ARG HTTP_PROXY
ARG HTTPS_PROXY
ENV HTTP_PROXY=$HTTP_PROXY
ENV HTTPS_PROXY=$HTTPS_PROXY不然构建过程里的 wget、curl 都会因为没代理而失败。
镜像构建的网络问题其实不难处理,关键是要分清是主机网络、Docker 配置,还是源站访问的问题。一步步排查,多数情况换个 DNS 或镜像源就能搞定。