概述
如果Docker所在宿主机无法直接与互联网连通,需要通过代理去上网的话,直接通过docker pull xxx拉取镜像将会失败, 本文主要是记录一下如何配置代理服务器让Docker能够正常拉取外网镜像。
说明: 本文几乎完全照抄官方文档(官方文档已经写得非常详细,建议直接参考 https://docs.docker.com/engine/daemon/proxy/#httphttps-proxy)
注:建议网上找参考资料,首选官方文档,可以避免走弯路。
问题现象
直接拉取镜像,报错如下:
# docker pull nginx
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
环境描述
- 宿主机操作系统: Ubuntu22.04
- Docker 版本: 28.0.1
配置代理具体步骤
(1) 配置 http-proxy.conf
# mkdir -p /etc/systemd/system/docker.service.d
# vim /etc/systemd/system/docker.service.d/http-proxy.conf
添加以下内容
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128" # 这里填自己真实的代理
Environment="HTTPS_PROXY=http://proxy.example.com:3128"# 如果有内部镜像服务器,可以配置`NO_PROXY`参数, 比如
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp" # 多个地址用,号隔开
(2)重启docker服务
# systemctl daemon-reload systemctl restart docker.service
# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
38513bd72563: Pull complete
10d18f46ee87: Pull complete
a8d825a0683a: Pull complete
a131bc1d4bd5: Pull complete
3818929ac19f: Pull complete
1498b1cfda15: Pull complete
c50c84d0ed4d: Pull complete
Digest: sha256:029d4461bd98f124e531380505ceea2072418fdf28752aa73b7b273ba3048903
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
#
至此,docker 已经可以正常拉取外网镜像。
特别需要注意的是, 这是docker daemon 访问外网配置代理的方法, 不是docker container 访问外网的配置方法!