Docker 代理配置指南
一、临时代理设置(开发/测试时用)
命令行设置(仅当前终端有效):
PROXY_URL="http://127.0.0.1:1087"
export HTTP_PROXY=${PROXY_URL}
export HTTPS_PROXY=${PROXY_URL}
export NO_PROXY="localhost,127.0.0.1,docker.yourcompany.com"
使用场景:
- 临时测试代理是否可用;
- 用于执行如
curl
、docker build
等命令时; - 关闭终端或注销 shell 后失效。
一、环境变量说明
1. HTTP_PROXY
/ HTTPS_PROXY
- 作用:告诉各种网络工具(如
curl
、pip
、apt
、docker build
等)在访问 HTTP / HTTPS 网络时要通过指定的代理地址转发请求。 格式:
http://ip:port
例如:http://127.0.0.1:1087
- 有用户名密码的写法:
http://username:password@proxy.example.com:8080
- 支持的协议:通常是 HTTP 代理,也可能支持 SOCKS(如
socks5://
,但支持情况有限)
示例:
export HTTP_PROXY=http://127.0.0.1:1087
export HTTPS_PROXY=http://127.0.0.1:1087
2. NO_PROXY
- 作用:告诉系统 “对这些地址不要走代理,直接访问”。
- 格式:逗号分隔的一组域名/IP 或通配符
示例:
export NO_PROXY="localhost,127.0.0.1,dockerhub.mycompany.com,.internal"
上面的意思是:
localhost
和127.0.0.1
(本地回环地址)不会经过代理;dockerhub.mycompany.com
是公司内网的镜像源,也不走代理;.internal
代表所有结尾是.internal
的域名(例如svc.internal
)都不走代理。
重点提示:
如果你不设NO_PROXY
,本地访问也会尝试走代理,容易导致访问失败或非常慢。
二、全局持久配置(推荐用于开发机)
写入 ~/.bashrc
或 ~/.zshrc
(取决于你用哪个 Shell):
# ~/.bashrc 或 ~/.zshrc
PROXY_URL="http://127.0.0.1:1087"
export HTTP_PROXY=${PROXY_URL}
export HTTPS_PROXY=${PROXY_URL}
export NO_PROXY="localhost,127.0.0.1,dockerhub.yourcompany.com"
保存后执行:
source ~/.bashrc # 或 source ~/.zshrc
使用场景:
- 适用于所有命令行工具;
- 所有新的 shell 会话都会继承;
- 但不会影响 Docker 守护进程后台拉镜像行为。
三、Docker Daemon(后台服务)配置代理
适用于
docker pull
、docker-compose up
拉镜像等行为
1. 创建配置目录:
sudo mkdir -p /etc/systemd/system/docker.service.d
2. 创建配置文件:
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
内容如下(按需修改):
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:1087"
Environment="HTTPS_PROXY=http://127.0.0.1:1087"
Environment="NO_PROXY=localhost,127.0.0.1,dockerhub.yourcompany.com"
3. 重启 Docker:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 验证是否生效:
sudo systemctl show --property=Environment docker
四、Docker 构建镜像(client)配置代理
方式一:写入 ~/.docker/config.json
mkdir -p ~/.docker
nano ~/.docker/config.json
内容如下:
{
"proxies": {
"default": {
"httpProxy": "http://127.0.0.1:1087",
"httpsProxy": "http://127.0.0.1:1087",
"noProxy": "localhost,127.0.0.1,dockerhub.yourcompany.com"
}
}
}
作用:会让 docker build
构建过程自动使用代理。
方式二:Dockerfile 中设置 ENV(容器构建时用)
FROM ubuntu:22.04
ENV HTTP_PROXY=http://127.0.0.1:1087
ENV HTTPS_PROXY=http://127.0.0.1:1087
ENV NO_PROXY=localhost,127.0.0.1
方式三:运行容器时临时传入
docker run \
-e HTTP_PROXY=http://127.0.0.1:1087 \
-e HTTPS_PROXY=http://127.0.0.1:1087 \
-e NO_PROXY=localhost,127.0.0.1 \
ubuntu:22.04 curl http://google.com
总结表格
场景 | 配置方法 | 是否推荐 |
---|---|---|
临时测试代理 | export HTTP_PROXY=... |
✅ 开发调试 |
永久生效(命令行工具) | .bashrc / .zshrc |
✅ 推荐 |
Docker 构建镜像时走代理 | ~/.docker/config.json |
✅ 推荐 |
Docker 拉取镜像走代理(daemon) | /etc/systemd/system/docker.service.d/*.conf |
✅ 必须 |
Dockerfile 设置代理 | ENV HTTP_PROXY=... |
✅ 如需构建 |
运行容器时传入代理 | docker run -e HTTP_PROXY=... |
✅ 临时使用 |