2024-09-04
Docker
00

目录

在 Docker 操作中使用 VPN 代理的实用指南
1. 为 docker pull 配置代理
2. 为 docker run 配置代理
方法一:直接在容器内部设置代理(推荐)
方法二:使用宿主机网络(--network=host)
方法四:配置全局代理
3. 为 docker build 配置代理
使用宿主机网络模式
使用虚拟网卡的网络模式
4. 重要注意事项

在 Docker 操作中使用 VPN 代理的实用指南

在日常的 Docker 操作中,特别是使用 docker pulldocker rundocker build 命令时,可能会遇到网络访问受限的情况,尤其是当你在公司网络或者需要访问被限制的资源时。这时候,配置一个 VPN 代理变得非常重要。本文将详细介绍如何在不同的 Docker 操作中正确配置 VPN 代理。

1. 为 docker pull 配置代理

当你需要通过 docker pull 命令从 Docker Hub 拉取镜像时,Docker 代理的设置由 systemd 接管。因此,需要通过以下步骤来配置代理:

  1. 编辑 Docker 服务的代理配置

    bash
    sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
  2. 添加 HTTP 和 HTTPS 代理设置

    ini
    [Service] Environment="HTTP_PROXY=http://127.0.0.1:10811" Environment="HTTPS_PROXY=http://127.0.0.1:10811"

    这里的 127.0.0.1:10811 是你本机的 HTTP 代理地址。

  3. 重新加载并重启 Docker 服务

    bash
    sudo systemctl daemon-reload sudo systemctl restart docker
  4. 验证代理设置: 你可以通过以下命令查看 Docker 服务的环境变量,确保代理已生效:

    bash
    sudo systemctl show --property=Environment docker

配置完成后,docker pull 命令将通过配置的代理来拉取镜像。

2. 为 docker run 配置代理

当你使用 docker run 启动容器时,你可以通过以下几种方法来让容器使用代理:

方法一:直接在容器内部设置代理(推荐)

如果你希望容器内部直接使用代理,可以在启动容器后,通过以下命令设置代理:

bash
export ALL_PROXY='socks5://127.0.0.1:10810'

这里的 127.0.0.1:10810 是你本机的 SOCKS5 代理地址。

方法二:使用宿主机网络(--network=host

在启动容器时,可以使用 --network=host 选项共享宿主机的网络,然后在容器内设置代理:

bash
docker run --network=host my-container

在容器内部设置代理:

bash
export ALL_PROXY='socks5://127.0.0.1:10810'

使用 --network=host 时,容器将共享宿主机的网络,这样你可以直接使用 127.0.0.1 作为代理地址。

需要注意的是,使用 --network=host 时,所有端口都将与宿主机共享,端口映射 (-p) 参数将无法使用。

方法四:配置全局代理

你可以通过编辑 Docker 客户端配置文件 ~/.docker/config.json,为所有容器配置全局代理:

json
{ "proxies": { "default": { "httpProxy": "http://127.0.0.1:10811", "httpsProxy": "http://127.0.0.1:10811", "noProxy": "localhost,127.0.0.1" } } }

设置全局代理后,所有通过 docker run 创建的容器都会自动使用这些代理设置。

3. 为 docker build 配置代理

在构建 Docker 镜像时,你可以使用宿主机的网络模式,并通过 --build-arg 参数为构建过程指定代理:

使用宿主机网络模式

你可以通过 --network=host 选项让 docker build 使用宿主机网络,从而直接访问宿主机的代理:

bash
docker build --network=host --build-arg http_proxy=http://127.0.0.1:10811 --build-arg https_proxy=http://127.0.0.1:10811 -t my-image .

使用虚拟网卡的网络模式

如果你选择使用 Docker 默认的 bridge 网络模式,构建过程中将使用 Docker 的虚拟网卡,这时需要使用虚拟网卡的 IP 地址:

bash
docker build --build-arg http_proxy=http://172.17.0.1:10811 --build-arg https_proxy=http://172.17.0.1:10811 -t my-image .

bridge 网络模式下,172.17.0.1 是 Docker 默认的虚拟网卡地址,容器内部将通过该地址访问宿主机的代理。

4. 重要注意事项

  • 网络模式:在 docker rundocker build 中,根据你的需求选择合适的网络模式(bridgehost),以确保容器能够正确访问代理。
  • 全局代理:全局代理配置在 ~/.docker/config.json 中生效,但不会影响已创建的容器,只有新创建的容器会使用该配置。
  • 代理协议:Docker 目前仅支持 HTTP、HTTPS 和 FTP 协议的代理,不支持 SOCKS5 代理。如果需要使用 SOCKS5 代理,可以使用 polipo 等工具将 SOCKS5 转换为 HTTP 代理。

通过以上方法,你可以在使用 Docker 的过程中灵活地配置代理,确保在受限网络环境中也能顺利地进行镜像拉取、容器运行和镜像构建等操作。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!