• Docker 配置代理完整指南

    26-01-21 17:18 23 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
      
  • 入职满 11 周年纪念日

    26-01-20 10:19 27 0 生活

    79EE5F71-BDDD_thumb.jpg

    IMG_7957.JPG

文章归档

文章日历

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

文章标签

最新评论

友情链接