Docker 环境下的代理配置指南

#Docker代理#环境隔离#Daemon配置
阅读需 7 分钟||

在服务器或本地使用 Docker 时,网络受限是导致 docker pull 失败的最常见原因。然而,Docker 的架构分为守护进程(Daemon)、客户端(CLI)以及运行时的容器容器(Container),这三者的代理配置完全独立,绝不能混为一谈。

1. 区分三个代理层级

很多新手在终端里输入了 export http_proxy=...,却发现 docker pull 依然卡住。这是因为:

  • Docker CLI (客户端):你输入的 export 环境变量只影响终端里运行的命令本身(比如 docker build 时的上下文传输)。
  • Docker Daemon (服务端/守护进程):实际执行 docker pull 去拉取底层镜像的是系统后台运行的 Docker Daemon 服务。它根本无法读取你终端里的环境变量。
  • Container (容器内部):当容器跑起来以后,它内部运行的应用程序(如 npm, wget)如果需要翻墙,又需要单独传入环境变量。

2. 配置 Docker Daemon 代理 (解决拉取镜像失败)

Linux 环境 (Systemd)

在原生 Linux 环境下,你需要为 systemd 服务配置环境变量。

  1. 为 Docker 服务创建一个专用的 systemd 覆盖目录:
    sudo mkdir -p /etc/systemd/system/docker.service.d
  2. 创建或编辑 http-proxy.conf 文件:
    sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
  3. 写入代理配置(假设你的旁路由或本地代理监听在 192.168.1.100:7890):
    [Service]
    Environment="HTTP_PROXY=http://192.168.1.100:7890/"
    Environment="HTTPS_PROXY=http://192.168.1.100:7890/"
    Environment="NO_PROXY=localhost,127.0.0.1,.my-company.local"
  4. 重新加载并重启 Docker:
    sudo systemctl daemon-reload
    sudo systemctl restart docker

Docker Desktop 环境 (Windows / Mac)

如果您使用的是 Windows 或 Mac 版本的 Docker Desktop,配置则简单得多:

  1. 打开 Docker Desktop,点击右上角的齿轮图标进入 Settings。
  2. 导航至 Resources -> Proxies。
  3. 开启手动代理配置,填入您的 HTTP 代理地址(例如 http://127.0.0.1:7890)。
  4. 点击 Apply & restart 生效。

3. 配置容器内部代理

如果你正在 docker build 编译镜像,或者需要在容器内运行需要代理的脚本,可以通过在 ~/.docker/config.json 中配置默认代理,将其透传给所有新创建的容器。

编辑 ~/.docker/config.json:

{
 "proxies": {
   "default": {
     "httpProxy": "http://192.168.1.100:7890",
     "httpsProxy": "http://192.168.1.100:7890",
     "noProxy": "localhost,127.0.0.1"
   }
 }
}

4. 验证代理配置

配置完成后,你可以通过以下命令检查 Docker Daemon 的环境变量是否成功注入:

sudo systemctl show --property=Environment docker

然后尝试拉取一个无本地缓存的外网镜像:

docker pull alpine:latest

如果能够迅速秒下,说明 Docker Daemon 代理配置已完美生效。

机场讯 技术安全审查组Fact-Checked

本文所述的网络配置指南、路由分析及安全建议已通过技术独立验证。文内提及的客户端配置与底层原理引用自各开源项目的官方文档。为保障您的设备安全,请严格按照教程指引操作,切勿随意修改系统级内核参数。

相关推荐