0


快速设置 Docker 的三种网络代理配置

目录

通过代理访问网络是一个比较头疼的事情,例如:想访问远程的

Docker Daemon

需要代理,想拉取或推送国外的镜像需要代理,想容器内部访问国外的资源又需要代理。

上面的场景是不是让你很头大,但是请想开点,这篇文章将让你通往自由的国度。保护你的头发,让你留出更多的时间去做该做的事情。

上面说的是三个场景就是针对于不同的网络代理需要,根据需要处理即可。

Docker Client - 代理访问远程的 Docker Daemon

参考

Docker

官方文档:Use the Docker command line

Docker

Client

Daemon

端是可以不在同一个机器上的,可以通过

docker -h

连接其他的

Docker Daemon


在这里插入图片描述

Client

端设置代理其实就是设置

Linux

系统的代理,从而让系统的命令行可以通过代理连接到外部的网络。一般只需要配置

HTTP_PROXY

HTTPS_PROXY

这两个即可。

  • 临时生效: 在命令行中执行下面的命令,根据自己实际代理 IP 与代理端口设置(需要允许局域网连接):
exporthttps_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890
  • 永久生效,在系统变量中配置。系统变量配置有多个地方,例如在 /etc/profile 文件的底部添加下面的内容:
exporthttps_proxy=http://127.0.0.1:7890 
exporthttp_proxy=http://127.0.0.1:7890 

让配置文件生效:

source /etc/profile 

恭喜,

Docker Client

代理配置完成!

Docker Daemon - 代理拉取或推送国外镜像

参考

Docker

官方文档:Control Docker with systemd

有的时候我们会用到一些国外的镜像,比如搭建

k8s

时会用到

k8s.gcr.io

提供的镜像,但是无法正常

pull

;或者你想将某些镜像上传到国外的镜像仓库中,都需要使用代理进行操作。
在这里插入图片描述

注:Docker 守护程序(

dockerd

)是在

其启动环境中

使用

HTTP_PROXY

HTTPS_PROXY

NO_PROXY

环境变量来配置

HTTP

HTTPS

代理行为,需要在

Docker systemd

服务文件中添加此配置。 在

 daemon.json

文件或者是在

系统环境变量文件

中配置它们都不会使其生效。

要实现

Daemon

代理会比较复杂一些,并且下面的操作将覆盖默认的

docker.service

文件,这样当

Docker

启动的时候就会读取到下面的代理配置信息:

  1. /etc/systemd/system 目录下创建 docker.service.d 目录sudomkdir -p /etc/systemd/system/docker.service.d
  2. 在该目录下创建 http-proxy.conf 文件sudotouch /etc/systemd/system/docker.service.d/http-proxy.conf
  3. 选用你最喜欢的编辑器,编辑该文件并添加下面的内容,这里使用 vi/vim 进行编辑。vim /etc/systemd/system/docker.service.d/http-proxy.conf根据自身需要添加下面的内容并替换为实际的配置,一般只需要添加 HTTP_PROXYHTTPS_PROXY[Service]Environment="HTTP_PROXY=http://proxy.example.com:8080/"Environment="HTTPS_PROXY=http://proxy.example.com:8080/"Environment="NO_PROXY=localhost,127.0.0.1,.example.com"【注】HTTP_PROXY 用于代理访问 http 请求,HTTPS_PROXY 用于代理访问 https 请求,如果想某个 IP域名不走代理则配置到 NO_PROXY中。添加完成后,保存即可。
  4. 刷新更改并重新启动 Docker``````sudo systemctl daemon-reloadsudo systemctl restart docker

恭喜,

Docker Daemon

代理配置完成!

Container - 容器内部代理访问国外资源

参考 Docker 官方文档: Configure Docker to use a proxy server

该代理只针对于后续 build 或 run 的容器有效,已经创建好的不受影响。

主要是用于容器内部的网络访问。
在这里插入图片描述
本身容器就可以当做一个简化版的 Linux 系统,如果想实现容器内部的代理,则必须在容器内设置适当的环境变量。

  • 直接在容器内部进行修改,虽然也可以这样做,但是不是很推荐,如果不是测试使用,最好还是保证容器的完整性。> 如果是想要将该容器导出并移植到其他机器上去的话,那肯定是在容器内部修改环境变量导出。
  • Docker 17.06 及更早版本中,可以在构建映像(这会降低映像的可移植性)或创建或运行容器时通过指定参数来执行此操作。
  • Docker 17.07 及更高版本中Docker 提供了一个全局的配置可以通过配置 Docker 客户端以自动将代理信息传递给容器,从而让所有的容器内部都支持代理访问。

通过参数配置在这里就不多说了,无非就是命令的使用。这里主要说一下

Docker 17.07

及更高版本中的全局配置:

  1. Docker 客户端上,在启动容器的用户的主目录中创建或编辑文件 ~/.docker/config.json。 如果没有该目录或文件则使用相应的用户来创建。# 创建目录mkdir ~/.docker# 创建配置文件touch ~/.docker/config.json# 编辑配置文件vim ~/.docker/config.json根据自身需要添加下面的内容并替换为实际的配置,一般只需要添加 HTTP_PROXYHTTPS_PROXY 即可:{"proxies":{"default":{"httpProxy":"http://127.0.0.1:7890","httpsProxy":"http://127.0.0.1:7890","noProxy":"*.test.example.com,.example2.com,127.0.0.0/8"}}}【注】HTTP_PROXY 用于代理访问 http 请求,HTTPS_PROXY 用于代理访问 https 请求,如果想某个 IP域名不走代理则配置到 NO_PROXY中。添加完成后,保存即可。
  2. 重新启动 Docker``````sudo systemctl restart docker

恭喜,

Container

代理配置完成!

Roc’s Blog:详解 Docker 的三种网络代理配置


本文转载自: https://blog.csdn.net/peng2hui1314/article/details/124267333
版权归原作者 Roc.Chang 所有, 如有侵权,请联系我们删除。

“快速设置 Docker 的三种网络代理配置”的评论:

还没有评论