Docker 进程使用代理
文章目录
在docker的使用过程中,有些时候需要给docker加上代理,可能是需要通过内部网关,也可能是需要给镜像下载加速,那么怎么给docker加代理呢?
方案
Docker守护程序在其启动环境中使用HTTP_PROXY、HTTPS_PROXY和NO_PROXY环境变量来配置HTTP或HTTPS代理行为。您不能使用daemon.json文件配置这些环境变量。
此示例覆盖默认的docker.service文件。
如果使用 root 账户运行 docker
-
为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:80”
如果你使用的是 HTTPS 代理服务器,请设置
HTTPS proxy
环境变量:[Service] Environment=“HTTPS_PROXY=https://proxy.example.com:443”
可以设置多个环境变量;同时设置非HTTPS和HTTPS代理;
[Service] Environment=“HTTP_PROXY=http://proxy.example.com:80” Environment=“HTTPS_PROXY=https://proxy.example.com:443”
-
如果您有内部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:80” Environment=“HTTPS_PROXY=https://proxy.example.com:443” 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
如果使用普通用户运行 docker
在普通用户模式下运行Docker时,systemd配置文件的位置不同。在普通用户模式下运行时,Docker作为用户模式的systemd服务启动,并使用~/.config/systemd/user/docker.service.d/
中每个用户主目录中存储的文件。此外,必须在不使用sudo的情况下使用–user标志执行systemctl。如果您在普通用户模式下运行Docker,请使用一下的方式。
-
创建文件的目录
mkdir -p ~/.config/systemd/user/docker.service.d
-
重启命令
systemctl –user daemon-reload systemctl –user restart docker
-
验证命令
systemctl –user show –property=Environment docker
配置好以后,拉取镜像等操作,就会通过代理服务器了。