跳过正文

docker代理配置详解

·213 字·1 分钟
陌白
作者
陌白
一只热爱技术的码农
目录

一、容器内网络代理
#

Docker容器内部访问外部网络时,服务器环境需要配置代理的情况。通过配置环境变量实现。

1.环境变量解释
#

  • HTTP_PROXY: 用于 HTTP 请求的代理服务器。

  • HTTPS_PROXY: 用于 HTTPS 请求的代理服务器。

  • NO_PROXY: 指定不需要通过代理服务器访问的主机名、域名或 IP 地址列表,多个值之间用逗号分隔。

2.在 docker run 命令中设置环境变量:
#

 docker run \
   -e HTTP_PROXY="http://127.0.0.1:8080" \
   -e HTTPS_PROXY="http://127.0.0.1:8080" \
   -e NO_PROXY="localhost,127.0.0.1,example.com" \
   <image_name>

3.在 compose文件中设置环境变量:
#

services:
  service-name:
      image: <image_name>
      container_name: <container_name>
      environment:
        - HTTP_PROXY="http://127.0.0.1:8080"
        - HTTPS_PROXY="http://127.0.0.1:8080"
        - NO_PROXY="localhost,127.0.0.1,example.com"
      ... ## 其他配置

4.在 Dockerfile 中设置环境变量 (不推荐):
#

FROM <base_image>

ENV HTTP_PROXY="http://127.0.0.1:8080"
ENV HTTPS_PROXY="http://127.0.0.1:8080"
ENV NO_PROXY="localhost,127.0.0.1,example.com"

## 其他构建指令

上述配置,会在构建镜像和容器运行时都生效

二、构建镜像时代理
#

在构建Docker镜像过程中需要访问外部网络的情况。

1. 在 Dockerfile 中设置代理
#

已在第一节讲述过:

FROM <base_image>

ENV HTTP_PROXY="http://127.0.0.1:8080"
ENV HTTPS_PROXY="http://127.0.0.1:8080"
ENV NO_PROXY="localhost,127.0.0.1,example.com"

## 其他构建指令

2. 执行构建命令时使用 –build-arg 传递代理参数
#

构建命令如下:

docker build --build-arg HTTP_PROXY="http://127.0.0.1:8080" \
             --build-arg HTTPS_PROXY="http://127.0.0.1:8080" \
             --build-arg NO_PROXY="localhost,127.0.0.1,example.com" \
             -t <image_name> .

注意:上述两种配置不会在拉取(pull)镜像时生效。

注意:上述两种配置不会在拉取(pull)镜像时生效。

注意:上述两种配置不会在拉取(pull)镜像时生效。

三、拉取镜像时代理
#

Docker守护进程拉取镜像时,它并不读取Dockerfile里的ENV--build-arg等设置,而是直接由Docker守护进程发起网络请求。如果网络环境要求必须走代理,那么需要对Docker守护进程进行全局代理配置。

四、全局代理
#

1.配置 Docker Daemon 的代理
#

编辑daemon.json文件,加入代理设置

{
  "proxies": {
    "http-proxy": "http://127.0.0.1:8080",
    "https-proxy": "http://127.0.0.1:8080",
    "no-proxy": "localhost,127.0.0.1,example.com"
  }
}

Docker Daemon 的配置文件所在位置如下:

  • Linux 常规模式: /etc/docker/daemon.json
  • Linux Rootless 模式: ~/.config/docker/daemon.json
  • Windows: C:\ProgramData\docker\config\daemon.json
  • macOS Docker Desktop: ~/.docker/config/daemon.json
  • macOS OrbStack: ~/.orbstack/config/docker.json

2.使用 Systemd 配置代理 (适用于 Linux)
#

sudo mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf

http-proxy.conf 文件内容如下:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8080"
Environment="HTTPS_PROXY=http://127.0.0.1:8080"
Environment="NO_PROXY=localhost,127.0.0.1,example.com"

Reload 服务配置并重启 Docker Daemon 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

五、总结
#

Docker 代理配置涉及多个层面,包括容器运行时、镜像构建时和镜像拉取时。

  • 容器运行时代理: 使用环境变量 (HTTP_PROXY, HTTPS_PROXY, NO_PROXY),可以通过 docker rundocker-compose 灵活配置。
  • 镜像构建时代理: 推荐使用 --build-arg 方式传递代理参数,避免将代理信息固化在镜像中。
  • 镜像拉取时代理: 需要配置 Docker Daemon 的全局代理,可以通过修改 daemon.json 文件或使用 Systemd 配置。

选择合适的代理配置方式取决于具体的应用场景和需求。理解这些配置方式的差异和适用范围,可以帮助我们更好地管理 Docker 容器的网络访问。

相关文章