为Docker配置代理服务器
修改 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拉取镜像失败,请使用方法一(守护进程配置)。 - 如果你希望容器启动后自动继承代理,请使用方法二(客户端配置)。
- 如果只是偶尔需要,用**方法三(临时指定)**最方便。
评论功能已关闭