Docker 配置代理完整指南

26-01-21 17:18 19 0 技术

背景

在国内环境下使用 Docker 时,经常遇到拉取镜像缓慢或超时的问题。虽然可以配置镜像加速器,但随着国内镜像源的不稳定,使用代理成为了更可靠的解决方案。

问题现象

执行 docker builddocker pull 时出现以下错误:

ERROR: failed to solve: DeadlineExceeded: failed to resolve source metadata for docker.io/xxx
dial tcp xxx.xxx.xxx.xxx:443: i/o timeout

核心原理

Docker 架构分为两部分: - Docker Client: 命令行工具,接收用户命令 - Docker Daemon: 后台服务,实际执行拉取镜像等操作 当我们在终端设置 export HTTP_PROXY=... 时,只影响 Docker Client,而真正需要网络访问的 Docker Daemon 并未使用代理。

解决方案

为 Docker Daemon 配置代理(推荐) 1. 创建 systemd 配置目录

sudo mkdir -p /etc/systemd/system/docker.service.d
  1. 创建代理配置文件

    sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
    
  2. 添加代理配置

    [Service]
    Environment="HTTP_PROXY=http://your-proxy-ip:port"
    Environment="HTTPS_PROXY=http://your-proxy-ip:port"
    Environment="NO_PROXY=localhost,127.0.0.1,*.local,registry.internal.com"
    

    配置说明:

  • HTTP_PROXY: HTTP 协议代理地址
  • HTTPS_PROXY: HTTPS 协议代理地址(Docker Hub 使用 HTTPS)
  • NO_PROXY: 不使用代理的地址列表,通常包括:
    • localhost, 127.0.0.1: 本地地址
    • *.local: 本地域名
    • 内网私有镜像仓库域名
  1. 重载配置并重启 Docker

    # 重载 systemd 配置
    sudo systemctl daemon-reload
    # 重启 Docker 服务
    sudo systemctl restart docker
    
  2. 验证配置

    # 查看 Docker 服务的环境变量
    sudo systemctl show --property=Environment docker
    

    预期输出:

    Environment=HTTP_PROXY=http://your-proxy-ip:port HTTPS_PROXY=http://your-proxy-ip:port NO_PROXY=localhost,127.0.0.1
    
  3. 测试代理连接

    # 测试是否能通过代理访问 Docker Hub
    curl -x http://your-proxy-ip:port -I https://registry-1.docker.io/v2/
    # 拉取测试镜像
    docker pull hello-world
    
请登录后发表评论 点击登录

文章归档

文章日历

2026 年 01 月
27 28 29 30 01 02 03
04 05 06 07 08 09 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

文章标签

最新评论

友情链接