在centos7系统中如何给docker配置代理

时间:2024-03-10 20:32:07

一、需求场景

生产环境私有云中,通常一个集群的机器中只有几台机器可以直接访问公网,其他机器需要通过代理的方式从能访问公网的机器出去,在已经做了如下配置之后,使用docker pull命令已经报错超时timeout,这时可以尝试给docker服务配置代理解决。

报错信息如下:

[root@iZjz801fwrm6zwvn5l16uoZ portainer]# docker pull portainer/portainer
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 114.114.114.114:53: read udp 192.168.131.10:38902->114.114.114.114:53: i/o timeout
[root@iZjz801fwrm6zwvn5l16uoZ portainer]#

在这里插入图片描述
/etc/docker/daemon.json 配置如下

{
  "registry-mirror": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "insecure-registries": [
    "reg.xxx.com"
  ]
}

在能访问互联网的机器192.168.131.10部署了代理软件squid

/etc/profile中添加代理,添加后curl可以访问百度,docker pull依旧报错timeout

export all_proxy=http://192.168.131.10:31280
export http_proxy=http://192.168.131.10:31280
export https_proxy=http://192.168.131.10:31280
export no_proxy=localhost,127.0.0.1,::1,192.168.1.131.0/22

二、docker服务系统代理配置

在CentOS 7系统中,如果你想要配置Docker使用系统代理来执行docker pull等操作,你需要为Docker守护进程指定代理设置。以下是步骤:

1. 创建或编辑Docker服务的systemd drop-in文件

首先,创建一个名为http-proxy.conf的文件在/etc/systemd/system/docker.service.d/目录中。如果目录不存在,则需要创建它:

mkdir -p /etc/systemd/system/docker.service.d

然后,使用你喜欢的文本编辑器(如nano或vi)创建或编辑http-proxy.conf文件:

vim /etc/systemd/system/docker.service.d/http-proxy.conf

2. 添加代理配置

在http-proxy.conf文件中,添加如下内容以设置HTTP和HTTPS代理:

[Service]
Environment="HTTP_PROXY=http://192.168.131.10:31280/"
Environment="HTTPS_PROXY=http://192.168.131.10:31280/"

如果你的网络环境中存在一些不需要通过代理访问的内部或本地地址,你还可以添加一个NO_PROXY环境变量:

Environment="NO_PROXY=localhost,127.0.0.1,::1,192.168.1.131.0/22,.your-company.com"

3. 重新加载并重启Docker服务

配置完代理之后,重新加载systemd管理器的配置,然后重启Docker服务以应用更改:

systemctl daemon-reload
systemctl restart docker

4. 验证配置

为了验证代理配置是否已正确应用到Docker服务,你可以查看Docker服务的环境变量:

systemctl show --property=Environment docker

这将显示Docker服务的环境变量,包括刚刚配置的代理设置。
在这里插入图片描述
现在,你的Docker客户端应该会使用指定的代理服务器来拉取镜像和执行其他网络操作。
在这里插入图片描述