docker 配置代理

说明:该方法仅对 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%%[email protected]:3128/"

如果您有需要在没有代理的情况下联系的内部 Docker 注册表,则可以通过 NO_PROXY 环境变量指定它们。

NO_PROXY 变​​量指定一个字符串,该字符串包含应从代理中排除的主机的逗号分隔值。您可以指定以下选项来排除主机:
IP 地址前缀 ( 1.2.3.4 )

域名或特殊 DNS 标签 ( * )

域名与该名称及其所有子域名匹配。带有 前导“.”仅匹配子域名。例如,给定域名 foo.example.comexample.com
example.comexample.comfoo.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 docker

Environment=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

你可能感兴趣的:(docker)