Docker如何设置代理

问题

Docker在国内使用时经常出现网络不稳定的情况,比如拉取镜像时速度很慢,甚至失败。
如何给Docker设置代理呢?

回答

Dockerd 代理

给Docker服务设置代理,可以作用于镜像拉取

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

内容如下:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

重启Docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

Container 代理

给Docker容器设置代理,可以作用于容器内的网络请求

修改~/.docker/config.json,按结构添加如下内容:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:8080",
     "httpsProxy": "http://proxy.example.com:8080",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}

Docker Build 代理

对于在Docker Build阶段,上述容器代理又是不生效的。需要用--build-arg注入代理设置。

docker build . \
    --build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
    --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

使用镜像

除了设置代理外,如果只是拉取镜像,还可以使用国内的镜像源,比如:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

最后修改于 2025-04-21