在受限网络中拉取 Docker 镜像需分别配置 daemon 和容器内代理:1. daemon 代理通过 /etc/docker/daemon.json 的 proxies 字段或 systemd 环境变量设置;2. 容器内代理需通过运行时注入、Dockerfile 或构建配置实现;3. 可搭配国内镜像加速器提升速度。

在受限网络中拉取 Docker 镜像,核心是让 Docker 守护进程(daemon)和容器内应用都能走通代理。不是只配一次就完事,得区分“拉镜像时用代理”和“容器运行时用代理”两种场景,且配置位置不同、生效方式也不同。
一、Docker daemon 拉镜像走代理(最常用)
这是解决 docker pull 失败、超时、连接拒绝 的首要配置。Docker 服务本身需要通过代理访问外网镜像仓库(如 Docker Hub、GitHub Container Registry 等)。
- 推荐方式:修改
/etc/docker/daemon.json,使用proxies字段(Docker 20.10+ 原生支持) - 内容示例(请替换为你的代理地址):
"proxies": {
"httpProxy": "http://192.168.1.100:7890",
"httpsProxy": "http://192.168.1.100:7890",
"noProxy": "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16"
}
}
- 保存后必须重启 Docker 才生效:
sudo systemctl daemon-reload && sudo systemctl restart docker - 验证是否生效:
docker info | grep -i proxy,应看到输出的 Proxy 配置项
二、systemd 级代理(兼容旧版或企业环境)
某些 Linux 发行版(如 CentOS 7、部分定制系统)对 daemon.json 中的 proxies 支持不完整,此时需回退到 systemd 环境变量方式。
- 创建配置目录和文件:
sudo mkdir -p /etc/systemd/system/docker.service.d - 新建
/etc/systemd/system/docker.service.d/http-proxy.conf,内容如下:
Environment="HTTP_PROXY=http://proxyuser:pass@192.168.1.100:8080"
Environment="HTTPS_PROXY=http://proxyuser:pass@192.168.1.100:8080"
Environment="NO_PROXY=localhost,127.0.0.1,.internal.example.com"
- 注意:如果代理需要认证,URL 中必须带用户名密码;NO_PROXY 支持域名后缀(如
.example.com)和 CIDR 网段 - 同样要执行:
sudo systemctl daemon-reload && sudo systemctl restart docker
三、容器内应用也需要代理(常被忽略)
即使 daemon 能拉镜像,容器启动后若要访问外部 API、安装包、git clone 等,仍可能失败——因为容器默认不继承宿主机的代理设置。
- 临时方案:运行容器时手动注入环境变量:
docker run -e HTTP_PROXY=http://host.docker.internal:7890 -e HTTPS_PROXY=... nginx - 持久方案:在 Dockerfile 中写死(仅限可控构建):
ENV HTTP_PROXY=http://host.docker.internal:7890 - 通用方案:在
/etc/docker/daemon.json中添加default-runtime或配合~/.docker/config.json配置 build 时的代理(适用于 docker build)
四、搭配镜像加速器效果更佳
代理解决“连不上”,加速器解决“慢”。两者完全兼容,建议同时启用:
- 选一个当前有效的国内镜像源,例如:
-
https://docker.m.daocloud.io(DaoCloud,2026 年仍稳定) -
https://docker.ckyl.me或https://hub.uuuadc.top(社区维护较活跃) - 加入 daemon.json 的
registry-mirrors数组,再重启 Docker


















