如何配置Docker通过代理去pull镜像

概述

如果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 访问外网的配置方法!

posted @ 2025-10-28 14:41  xuege  阅读(204)  评论(0)    收藏  举报