Docker 配置代理(Linux)
在 Linux 系统中为 Docker 配置代理,可以让 Docker 拉取镜像时通过代理服务器访问网络,解决国内访问 Docker Hub 速度慢或无法访问的问题。
🔹 daemon.json 配置方法
1. 创建或编辑 Docker 配置文件
Docker 的代理配置文件位于 /etc/docker/daemon.json,如果该文件不存在,需要先创建:
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json提示
如果文件已存在且包含其他配置,请在现有内容基础上添加 proxies 配置项,注意 JSON 格式的正确性。
2. 添加代理配置
将以下内容写入配置文件:
{
"proxies": {
"http-proxy": "http://127.0.0.1:7890",
"https-proxy": "http://127.0.0.1:7890",
"no-proxy": ""
}
}配置说明
http-proxy:HTTP 代理地址和端口https-proxy:HTTPS 代理地址和端口no-proxy:不使用代理的地址列表,多个地址用逗号分隔
完整配置示例
如果 daemon.json 中还有其他配置(如镜像加速器),可以在现有内容基础上加入 proxies 配置项:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
],
"proxies": {
"http-proxy": "http://127.0.0.1:7890",
"https-proxy": "http://127.0.0.1:7890",
"no-proxy": "localhost,127.0.0.1,*.aliyuncs.com"
},
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}3. 重载配置并重启 Docker
配置完成后,需要重载 systemd 配置并重启 Docker 服务:
sudo systemctl daemon-reload
sudo systemctl restart docker4. 验证配置是否生效
检查 Docker 配置信息,确认代理配置已加载:
cat /etc/docker/daemon.json
docker info | grep -i proxy或者尝试拉取镜像测试:
docker pull hello-world🔹 取消 daemon.json 代理
如需取消 /etc/docker/daemon.json 中的代理配置,有两种方法:
方法一:删除 proxies 配置项
编辑 /etc/docker/daemon.json,删除 proxies 配置项,保存后重启 Docker:
sudo nano /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker方法二:清空代理地址
将代理地址设置为空字符串:
{
"proxies": {
"http-proxy": "",
"https-proxy": "",
"no-proxy": ""
}
}然后重启 Docker 服务。
🔹 systemd .conf 配置方法
除了直接写 /etc/docker/daemon.json,Linux 上也可以通过 systemd 的 drop-in 配置文件给 Docker daemon 设置代理。这种方式会把代理写成 Docker 服务的环境变量,配置文件通常放在 /etc/systemd/system/docker.service.d/http-proxy.conf。
适用场景
- 适用于使用 systemd 管理 Docker 服务的 Linux 发行版
- 适合不想改动
/etc/docker/daemon.json,只想单独管理 Docker 服务代理的情况 - 如果
daemon.json已经配置了proxies,建议二选一,避免排查时混淆
注意
如果不需要在 daemon.json 中配置代理,可以让它保持为空对象:echo '{}' | sudo tee /etc/docker/daemon.json。如果 daemon.json 里还有 registry-mirrors、日志、运行时等其他 Docker 配置,不要直接清空文件,应该只删除其中的 proxies 配置项。
1. 创建 systemd drop-in 目录
sudo mkdir -p /etc/systemd/system/docker.service.d2. 写入代理配置文件
创建并编辑 /etc/systemd/system/docker.service.d/http-proxy.conf:
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf写入以下内容:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,172.17.0.0/16"提示
也可以不用 nano,直接用 tee 写入配置。比如代理服务在局域网主机 192.168.31.233:7890 上时:
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://192.168.31.233:7890"
Environment="HTTPS_PROXY=http://192.168.31.233:7890"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.31.0/24,172.17.0.0/16"
EOF其中:
HTTP_PROXY:HTTP 代理地址HTTPS_PROXY:HTTPS 代理地址NO_PROXY:不走代理的地址,建议包含本机地址、局域网网段和 Docker 默认网段
示例说明
上面的代理地址 127.0.0.1:7890 表示代理服务运行在 Docker 所在机器本机。如果代理服务在局域网其他机器上,请改成对应的局域网 IP 和端口。
3. 重载 systemd 并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker4. 验证配置是否生效
docker info | grep -i proxy正常情况下会看到类似输出:
HTTP Proxy: http://127.0.0.1:7890
HTTPS Proxy: http://127.0.0.1:7890
No Proxy: localhost,127.0.0.1,172.17.0.0/16也可以查看当前 drop-in 配置:
systemctl cat docker🔹 取消 systemd .conf 代理
如果使用的是 /etc/systemd/system/docker.service.d/http-proxy.conf 这种方式,删除该文件后重载并重启 Docker 即可:
sudo rm /etc/systemd/system/docker.service.d/http-proxy.conf
sudo systemctl daemon-reload
sudo systemctl restart docker再执行下面命令确认代理已经移除:
docker info | grep -i proxy🔹 Docker Compose 代理配置
如果使用 Docker Compose 构建镜像时需要代理,可以在 docker-compose.yml 中配置:
version: '3'
services:
app:
build:
context: .
args:
HTTP_PROXY: http://127.0.0.1:7890
HTTPS_PROXY: http://127.0.0.1:7890
NO_PROXY: localhost,127.0.0.1🔹 常见问题
配置后无法拉取镜像
- 检查代理服务器是否正常运行
- 检查 JSON 格式是否正确(可使用
jq工具验证) - 查看 Docker 日志:
sudo journalctl -u docker -n 50
配置文件格式错误
使用 jq 工具验证 JSON 格式:
cat /etc/docker/daemon.json | jq .如果有错误,会提示具体位置。
Docker 无法启动
如果修改配置后 Docker 无法启动,可以查看详细错误信息:
sudo systemctl status docker
sudo journalctl -xeu docker恢复备份配置:
sudo cp /etc/docker/daemon.json.bak /etc/docker/daemon.json
sudo systemctl restart docker🔹 注意事项
建议
- 修改配置文件前建议先备份:
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak - 确保 JSON 格式正确,否则 Docker 服务可能无法启动
no-proxy建议添加内网地址段,避免内网访问也走代理- 代理配置对 Docker 守护进程生效,重启后持久保存
重要
- 配置代理后,所有
docker pull、docker build等操作都会通过代理 - 如果代理服务器不稳定,可能影响 Docker 的正常使用
- 企业内网环境请遵守公司网络安全策略
Docker Desktop GUI 界面配置代理
🔹 Docker Desktop GUI on Windows 配置步骤
1. 点击右上角的 ⚙️ 设置图标,进入设置页面。

2. 左侧列表选中 Resources
3. 右边选中 Proxies
4. 找到 Manual proxy configuration 开关,将其打开。
5. 填写代理地址
在配置界面中填写代理服务器地址:
比如:
- Web Server (HTTP):
http://192.168.31.84:7890 - Secure Web Server (HTTPS):
http://192.168.31.84:7890 - Bypass proxy settings for these hosts & domains:
localhost,127.0.0.1,*.local(可选)
提示
- 根据你的实际情况修改代理服务器的 IP 地址和端口
- 如果是本地代理,使用
127.0.0.1或localhost - 如果是局域网代理,使用局域网 IP 地址(如图中的
192.168.31.84)
5. 应用配置
填写完成后,点击右下角的 Apply & Restart 或 Close 按钮,Docker 会自动应用配置并重启。
🔹 验证配置
配置完成后,可以在终端中测试拉取镜像:
docker pull hello-world如果能够成功拉取,说明代理配置生效。