docker 配置代理
Error response from daemon 原因
常规的命令行程序如果要使用代理,需要设置两个环境变量:HTTP_PROXY
和 HTTPS_PROXY
,拉取镜像是 docker daemon 的职责,所以连接超时的异常由 daemon 抛出。
docker 命令只负责给 docker daemon 发命令,docker daemon 则按照命令执行具体的任务。
解决办法
我们要让 docker daemon 知道代理服务器的存在。而 docker daemon 是由 systemd 管理的,所以我们要从 systemd 配置入手。
- 创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置
sudo mkdir -p /etc/systemd/system/docker.service.d
- 新建配置文件
/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"
- 如果你自己建了私有的镜像仓库,需要 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=*
,那么所有请求都将不通过代理服务器。
- 重新加载配置文件,重启 dockerd
systemctl daemon-reload
systemctl restart docker
检查效果
- 检查确认环境变量已经正确配置:
sudo systemctl show --property=Environment docker
- 从
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
评论区