docker 配置代理
docker 配置代理有 2 中方法
1.Daemon configuration
直接在 /etc/docker/daemon.json
文件中配置
{"proxies": {"http-proxy": "http://proxy.example.com:3128","https-proxy": "https://proxy.example.com:3129","no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"}
}
重启 docker
systemctl restart docker
2.systemd unit file
为 docker 服务创建一个 systemd 插入目录
sudo mkdir -p /etc/systemd/system/docker.service.d
创建名为 /etc/systemd/system/docker.service.d/http-proxy.conf 的文件 添加 HTTP_PROXY 环境变量
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
如果您位于 HTTPS 代理服务器后面,请设置 HTTPS_PROXY 环境变量
[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:3129"
可以设置多个环境变量;设置非 HTTPS 和 HTTPS 代理
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=https://proxy.example.com:3129"
⚠️警告:代理值中的特殊字符(例如 #?!()[]{} )必须使用 %% 进行双重转义。例如
[Service]
Environment="HTTP_PROXY=http://domain%%5Cuser:complex%%23pass@proxy.example.com:3128/"
如果您有需要在没有代理的情况下联系的内部 Docker 注册表,则可以通过 NO_PROXY 环境变量指定它们。
NO_PROXY 变量指定一个字符串,该字符串包含应从代理中排除的主机的逗号分隔值。您可以指定以下选项来排除主机:
IP 地址前缀 ( 1.2.3.4 )
域名或特殊 DNS 标签 ( * )
域名与该名称及其所有子域名匹配。带有 前导“.”仅匹配子域名。例如,给定域名 foo.example.com
和 example.com
:
example.com
与 example.com
和 foo.example.com
匹配,并且
.example.com
仅匹配 foo.example.com
单个星号( * )表示不需要进行代理
IP 地址前缀( 1.2.3.4:80 )和域名( foo.example.com:80 )接受文字端口号
例子:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=https://proxy.example.com:3129"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
刷新更改并重新启动 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
验证配置是否已加载并与您所做的更改相匹配,例如
sudo systemctl show --property=Environment dockerEnvironment=HTTP_PROXY=http://proxy.example.com:3128 HTTPS_PROXY=https://proxy.example.com:3129 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp
参考官网
Daemon proxy configuration