docker代理的设置和使用

发布于 2024-06-23  981 次阅读


近期由于众所周知的原因,许多docker镜像站都停止了服务,依然提供服务的在目前的环境下也随时有倒的可能性。这里介绍下给docker配置代理的方法,虽然会麻烦点,但主动权在自己手里。

启动代理

安装代理比较敏感不多赘述,但有个特殊情况需要介绍下。因为很多时候我们要在国内云服务商的主机上使用代理,这些机器一般对类似的软件检测比较严格,这时候我们可以在另一台自己的电脑上启用代理,然后通过ssh端口转发的方式转发给云主机使用。

比如我在本机7800端口开启了代理,可以通过

ssh -N -R 7800:localhost:10080 root@xxx.xxx.xxx.xxx

把本机的7800端口的代理服务转发给云主机的10080端口使用,后续云主机上http://127.0.0.1:10080地址就可以当做http代理使用。

dockerd代理

官方文档Configure the daemon with systemd | Docker Docs

在执行docker pull等命令的时候,是由dockerd进程来执行的,因此我们设置代理也需要对其进行设置。

执行如下命令在systemd文件夹下创建代理配置文件

sudo mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf

http-proxy.conf文件中添加如下内容

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10080"
Environment="HTTPS_PROXY=http://127.0.0.1:10080"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"

其中NO_PROXY可以根据自己的需要配置。配置完成后,重启docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

重启之后执行sudo systemctl show --property=Environment docker查看,如果出现如下显示就说明配置成功了。

Environment=HTTP_PROXY=http://127.0.0.1:10080/ HTTPS_PROXY=http://127.0.0.1:10080/

容器代理

官方文档Configure Docker to use a proxy server | Docker Docs

创建或者修改~/.docker/config.json文件,添加如下内容

{
 "proxies": {
   "default": {
     "httpProxy": "http://proxyAddress:port",
     "httpsProxy": "http://proxyAddress:port",
     "noProxy": "*.test.example.com,.example.org,127.0.0.0/8"
   }
 }
}

此后新启动的容器都会自动使用代理,此外,在启动容器的时候使用-e参数也可以注入http_proxy等环境变量。