我的技术记录 - Docker
type: channel
link: https://web.echo.ac.cn/index.php/tag/Docker/
items: 为Docker配置代理服务器

为Docker配置代理服务器
type: item
date: 2026-03-09T14:38:00+08:00
description: 修改 Docker 的代理设置主要有三种场景，可以根据需求选择合适的方法。 💻 场景一：为 Docker 守护进程设置代理（最常用） 当你遇到 docker pull 无法拉取镜像，或 docker build 无法下载基础镜像时，通常是 Docker 后台守护进程（daemon）需要配置代理。它负责与镜像仓库（如 Docker Hub）通信。 对于使用 systemd 管理服务的 Linux 系统（如 Ubuntu、CentOS 7+、Debian），推荐通过创建配置文件来设置。 创建配置文件目录（如果不存在）： sudo mkdir -p /etc/systemd/system/docker.service.d 创建并编辑代理配置文件： 使用文本编辑器创建一个 http-proxy.conf 文件： sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf 填入代理配置： 根据你的代理服务器类型，将以下内容粘贴进去（请将 proxy.example.com:3128 替换为你的实际地址和端口）： [Service] Environment="HTTP_PROXY=http://proxy.example.com:3128" Environment="HTTPS_PROXY=http://proxy.example.com:3128" Environment="NO_PROXY=localhost,127.0.0.1,.local,*.example.com" NO_PROXY：非常重要！请在此处添加你公司内网的域名或 IP，告知 Docker 这些地址不走代理，避免内网访问故障。 SOCKS代理：如果你的代理是 SOCKS5 协议，可以这样写：Environment="HTTP_PROXY=socks5://127.0.0.1:1080"。 重新加载配置并重启 Docker： sudo systemctl daemon-reload sudo systemctl restart docker 验证配置是否生效： sudo systemctl show --property=Environment docker 如果输出显示了刚才设置的变量，就说明配置成功了。 📦 场景二：为 Docker 客户端设置代理（影响容器内部） 如果你希望所有新启动的容器内部都能自动使用代理环境变量，可以通过修改 Docker 客户端的配置文件来实现。这种方式不影响 docker pull，只影响容器。 编辑（或创建）~/.docker/config.json 文件： vi ~/.docker/config.json 添加或修改 proxies 字段： { "proxies": { "default": { "httpProxy": "http://proxy.example.com:3128", "httpsProxy": "https://proxy.example.com:3129", "noProxy": "localhost,127.0.0.1,.example.com" } } } 保存文件后，无需重启 Docker，后续新建的容器都会自动包含这些环境变量。 ⚙️ 场景三：临时或针对特定任务设置代理 运行单个容器时指定： 使用 docker run 的 -e 或 --env 参数，只为这一个容器设置代理： docker run -it --env HTTP_PROXY="http://proxy.example.com:3128" --env HTTPS_PROXY="http://proxy.example.com:3128" ubuntu bash 构建镜像时指定： 在 docker build 过程中使用 --build-arg 传递代理，这样在构建镜像时（如下载依赖包）就可以使用代理： docker build --build-arg HTTP_PROXY="http://proxy.example.com:3128" --build-arg HTTPS_PROXY="http://proxy.example.com:3128" -t your-image . ✅ 如何选择配置方式？ 如果你遇到的是 docker pull 拉取镜像失败，请使用方法一（守护进程配置）。 如果你希望容器启动后自动继承代理，请使用方法二（客户端配置）。 如果只是偶尔需要，用**方法三（临时指定）**最方便。