背景

因为一些安全原因,公司的机器网络环境不能直接访问外网,需要配置代理才能够访问,导致我使用拉取镜像的时候连接不到,报了如下的错误

Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while......

一般来说主机通过代理访问外网方式就是通过在命令行设置 export 来设置代理,如下所示:

export http_proxy=http://proxy_server:7890
export https_proxy=https://proxy_server:7890

但是docker拉取镜像是通过 docker daemon 服务完成,docker daemon 服务是在另一个进程中,不会读取当前shell 命令行的代理,所以 docker pull 会失败,官网的说明如下:

代理配置

  • 创建目录
1
2
mkdir /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d
  • 创建配置文件http-proxy.conf,内容如下:
    • 我这里的代理没有对外提供https,因此所以我在https_proxy协议还是写了http
1
2
3
4
[Service]
Environment="HTTP_PROXY=http://your.proxy.server:port/"
Environment="HTTPS_PROXY=http://your.proxy.server:port/"
Environment="NO_PROXY=localhost,127.0.0.1"
  • 重新加载systemd守护程序
1
systemctl daemon-reload
  • 重启Docker
1
systemctl restart docker
  • 验证是否已经加载
1
systemctl show docker --property Environment

Environment= …

  • 配置完后使用docker pull,发现有反应了