侧边栏壁纸
博主头像
Narutoの博客

行动起来,活在当下

  • 累计撰写 45 篇文章
  • 累计创建 24 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

docker 配置代理

Naruto
2024-09-17 / 0 评论 / 0 点赞 / 5 阅读 / 0 字

docker 配置代理

Error response from daemon 原因

常规的命令行程序如果要使用代理,需要设置两个环境变量:HTTP_PROXYHTTPS_PROXY ,拉取镜像是 docker daemon 的职责,所以连接超时的异常由 daemon 抛出。

docker 命令只负责给 docker daemon 发命令,docker daemon 则按照命令执行具体的任务。

解决办法

我们要让 docker daemon 知道代理服务器的存在。而 docker daemon 是由 systemd 管理的,所以我们要从 systemd 配置入手。

  1. 创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置
sudo mkdir -p /etc/systemd/system/docker.service.d
  1. 新建配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf,这个文件中将包含环境变量

注意:要配置两个,即 http 和 https

[Service]
Environment="HTTP_PROXY=192.168.8.2:7890"
Environment="HTTPS_PROXY=192.168.8.2:7890"
Environment="*.aliyuncs.com"
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
  1. 如果你自己建了私有的镜像仓库,需要 dockerd 绕过代理服务器直连,那么配置 NO_PROXY 变量:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com"

多个 NO_PROXY 变量的值用逗号分隔,而且可以使用通配符(*),极端情况下,如果 NO_PROXY=*,那么所有请求都将不通过代理服务器。

  1. 重新加载配置文件,重启 dockerd
systemctl daemon-reload
systemctl restart docker

检查效果

  1. 检查确认环境变量已经正确配置:
sudo systemctl show --property=Environment docker
  1. docker info 的结果中查看配置项。
 Operating System: Debian GNU/Linux 12 (bookworm)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.921GiB
 Name: debian
 ID: d22f4f48-eca3-4efa-b676-37c85f0989f4
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 HTTP Proxy: 192.168.8.2:7890
 HTTPS Proxy: 192.168.8.2:7890
 Experimental: true
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

参考

  1. 如何配置 docker 通过代理服务器拉取镜像
  2. 通过 systemd 配置代理解决 docker push 慢的问题
0

评论区