Enable proxy to docker

本贴最后更新于 1723 天前,其中的信息可能已经时移世异

为 Docker 启用代理加速镜像拉取与构建

本文介绍如何为 docker 启用代理,最近在家中进行 docker 构建的时候,那是真的感受到了家中网络对我的满满的恶意。

原来以为在终端中 export http_proxy 之后就万事大吉了,但是实际上速度并没有任何的变化,于是在连续几次测试之后,我发现终端的这个代理设置对 docker 并没有任何的作用,无论是使用 docker pull 拉取镜像的时候,还是使用 docker build 进行镜像构建的时候都不走终端的代理。 emmmmm 崩溃!

1. 配置 docker systemd 环境变量加速镜像拉取

容器内部的代理与 docker 服务所使用的代理配置不同、后续介绍如何为容器启用代理进行加速。

  1. 首先,为 Docker 服务创建一个 systemd 插入目录:
mkdir /etc/systemd/system/docker.service.d
  1. 然后新建一个 /etc/systemd/system/docker.service.d/http-proxy.conf 文件,并在此文件中填下类似下面的代理配置内容,添加 HTTP_PROXY 环境变量的值。
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:port"
  1. 如果你有内部的 Docker 仓库,需要在不使用代理的情况下连接,可以通过 NO_PROXY 环境变量进行指定:
Environment="HTTP_PROXY=http://proxy.example.com:port"
Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"
  1. 刷新更改
$ sudo systemctl daemon-reload
  1. 验证更改是否生效
$ sudo systemctl show --property Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:port
  1. 重启 docker 服务使更改生效
$ sudo systemctl restart docker

2 配置使容器使用代理

如果您的容器需要使用 HTTP,HTTPS 或 FTP 代理服务器,则可以通过下面的方式对其进行配置:

方式 1:配置 Docker 客户端文件

在 Docker 客户端上,在启动容器的用户主目录中创建或编辑文件 ~/.docker/config.json。添加一个 JSON 文件,如下所示,必要时用 httpsProxyftpProxy 替换代理类型,并替换代理服务器的地址和端口。您可以同时配置多个代理服务器。

通过将 noProxy 键设置为一个或多个逗号分隔的 IP 地址或主机,可以选择排除通过代理服务器的主机或范围。支持使用 * 字符作为通配符,如本示例所示。

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

创建或启动新容器时,环境变量会自动读取至容器内。

方式 2:使用环境变量

生成镜像或使用 --env 标志创建或运行容器时,可以将以下一个或多个变量设置为适当的值。此方法使镜像的可移植性降低,因此,如果您有 Docker 17.07 或更高版本,则应改为配置 Docker 客户端。

Variable Dockerfile example docker run Example
HTTP_PROXY ENV HTTP_PROXY "http://127.0.0.1:3001" --env HTTP_PROXY="http://127.0.0.1:3001"
HTTPS_PROXY ENV HTTPS_PROXY "https://127.0.0.1:3001" --env HTTPS_PROXY="https://127.0.0.1:3001"
FTP_PROXY ENV FTP_PROXY "ftp://127.0.0.1:3001" --env FTP_PROXY="ftp://127.0.0.1:3001"
NO_PROXY ENV NO_PROXY "*.test.example.com,.example2.com" --env NO_PROXY="*.test.example.com,.example2.com

参考资料

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    490 引用 • 916 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...