docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker设置代理以及配置镜像加速

docker设置代理以及配置镜像加速方式

作者:vortex5

proxychains无法代理Docker Daemon的网络请求,因其独立运行且依赖自身配置(如HTTP_PROXY环境变量或daemon.json),需通过Docker原生代理设置或国内镜像加速器解决,前者需配置守护进程或容器环境变量,后者提升拉取速度但稳定性可能受限

为什么proxychains对docker无效?

在使用 proxychains 尝试让 docker pull 通过代理拉取镜像时,常常发现代理并未生效,拉取速度依然很慢。其根本原因在于 Docker 的架构和 proxychains 的工作机制不兼容。

以下是详细的底层原理分析:

Docker 的运行机制

为何 proxychains 不生效

解决思路

国内镜像加速方案

在国内访问 Docker Hub 速度较慢时,可以通过配置镜像加速器来提升 docker pull 的速度。以下是具体步骤:

配置国内镜像加速器

编辑 /etc/docker/daemon.json 文件,添加镜像加速地址:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

其他可选的镜像加速服务包括:

保存后重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

注意事项

设置 Docker 代理的几种方案

以下是针对 docker pulldocker pushdocker builddocker run 的代理设置方法,适用于 Docker 17.07 及以上版本。

1. 为docker pull和docker push设置代理

由于 docker pulldocker push 的网络请求由 Docker Daemon 直接处理,需通过 systemd 配置 Docker Daemon 的环境变量。

步骤

创建 systemd 配置文件目录:

sudo mkdir -p /etc/systemd/system/docker.service.d

创建代理配置文件:

sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

添加以下内容:

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

应用配置并重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

验证环境变量是否生效:

sudo systemctl show --property=Environment docker

输出应包含配置的 HTTP_PROXYHTTPS_PROXY 变量。

注意

2. 为docker build设置代理

docker build 的代理设置需要在构建镜像时通过 --build-arg 参数传递代理环境变量。

方法

1.使用 --build-arg 参数指定代理:

docker build --build-arg http_proxy=http://172.17.0.1:8123 \
             --build-arg https_proxy=http://172.17.0.1:8123 \
             -t image_name .

2.使用 --network=host 模式:

如果在构建时指定 --network=host,容器将与宿主机共享网络,可直接使用 127.0.0.1

docker build --network=host \
             --build-arg http_proxy=http://127.0.0.1:8123 \
             --build-arg https_proxy=http://127.0.0.1:8123 \
             -t image_name .

注意

3. 为docker run设置代理(全局配置方式)

Docker 17.07 及以上版本支持通过 ~/.docker/config.json 配置全局代理,适用于 docker builddocker run 创建的容器。

步骤

编辑 ~/.docker/config.json

vim ~/.docker/config.json

添加以下内容:

{
  "proxies": {
    "default": {
      "httpProxy": "http://172.17.0.1:8123",
      "httpsProxy": "http://172.17.0.1:8123",
      "noProxy": "localhost,127.0.0.1,.daocloud.io"
    }
  }
}

生效方式

注意

如果容器无需使用代理,可在容器内清空环境变量:

export http_proxy=""
export https_proxy=""

4. 容器内使用宿主机代理的多种方法

以下方法适用于在容器运行时(docker run)使用宿主机的代理服务。

方法一:在容器内手动设置代理(推荐)

在容器内设置环境变量:

export ALL_PROXY="socks5://172.17.0.1:1080"

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

创建容器时使用 --network=host

docker run --network=host -it image_name bash

在容器内设置代理:

export ALL_PROXY="socks5://127.0.0.1:1080"

方法三:映射代理端口

创建容器时映射宿主机的代理端口:

docker run -p 1080:1080 -it image_name bash

在容器内设置代理:

export ALL_PROXY="socks5://127.0.0.1:1080"

方法四:通过全局代理配置(参考第 3 节)

注意事项与常见问题

协议支持

IP 地址选择

代理配置的持久性

调试代理问题

总结

代理设置方案

推荐做法

如需更多细节,请参考 Docker 官方文档:https://docs.docker.com/network/proxy/ 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文