目录

  • Docker Client - 代理访问远程的 Docker Daemon
  • Docker Daemon - 代理拉取或推送国外镜像
  • Container - 容器内部代理访问国外资源

通过代理访问网络是一个比较头疼的事情,例如:想访问远程的 Docker Daemon 需要代理,想拉取或推送国外的镜像需要代理,想容器内部访问国外的资源又需要代理。

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

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

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

参考 Docker 官方文档:Use the Docker command line

DockerClientDaemon 端是可以不在同一个机器上的,可以通过 docker -h 连接其他的 Docker Daemon

Client 端设置代理其实就是设置 Linux 系统的代理,从而让系统的命令行可以通过代理连接到外部的网络。一般只需要配置 HTTP_PROXYHTTPS_PROXY 这两个即可。

  • 临时生效: 在命令行中执行下面的命令,根据自己实际代理 IP 与代理端口设置(需要允许局域网连接):
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890
  • 永久生效,在系统变量中配置。系统变量配置有多个地方,例如在 /etc/profile 文件的底部添加下面的内容:
export https_proxy=http://127.0.0.1:7890
export http_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_PROXYHTTPS_PROXYNO_PROXY 环境变量来配置 HTTPHTTPS 代理行为,需要在 Docker systemd 服务文件中添加此配置。 在 daemon.json 文件或者是在系统环境变量文件中配置它们都不会使其生效。

要实现 Daemon 代理会比较复杂一些,并且下面的操作将覆盖默认的 docker.service 文件,这样当 Docker 启动的时候就会读取到下面的代理配置信息:

  1. /etc/systemd/system 目录下创建 docker.service.d 目录

    sudo mkdir -p /etc/systemd/system/docker.service.d
    
  2. 在该目录下创建 http-proxy.conf 文件

    sudo touch /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-reload
    sudo 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 的三种网络代理配置

快速设置 Docker 的三种网络代理配置相关推荐

  1. vmware三种网络模式配置(转载)

    虚拟机系统安装的是Linux系统 首先,在本机上查看所有网络配置连接,使用命令:ipconfig Microsoft Windows [版本 6.1.7600] 版权所有 (c) 2009 Micro ...

  2. Vmware虚拟机下三种网络模式配置

    VMware虚拟机有三种网络模式,分别是Bridged(桥接模式).NAT(网络地址转换模式).Host-only(主机模式). VMware workstation安装好之后会多出两个网络连接,分别 ...

  3. docker三种网络模式

    1.docker默认的三种网络模式: bridge:桥接模式 host:主机模式 none:无网络模式 查看网络模式: docker network ls 2.桥接模式 简介:桥接模式是docker ...

  4. 电信设置的nat 虚拟服务器192.168.1.3 是什么,VMware WorkStation的三种网络连接方式详解...

    一. 首先贴出本人在网络上找到与VMware网络连接相关的知识 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是host ...

  5. kali的网络设置及三种网络模式

    kali的网络设置及三种网络模式 1. Kali的网络设置 原理进程 2. Kali的三种模式 2.1 NAT (网络地址转换模式) 2.2 Bridged (桥接模式) 2.3 Host-Only( ...

  6. Docker的四种网络模式和相关网络命令等操作

    Docker网络模式 一.实现原理 二.Docker四种网络模式 三.Docker命令 1.查看网络列表 2.自定义网络固定IP 3.暴露端口 4.在宿主机环境执行容器内命令 5.怎么把宿主机的文件传 ...

  7. 解读3G时代的三种网络

    现在已经慢慢步入了3G时代了,最近老爸想换3G手机,但是一直也在徘徊呢,不知道 中国移动 中国联通 中国电信 这三家选哪一家好了,于是有空就在网上找了些关于这方面的知识供大家参考,不必在东奔西走的问了 ...

  8. response设置编码的三种方式以及比较

    https://blog.csdn.net/u010653908/article/details/53994021 response设置编码的三种方式以及比较 2017年01月03日 14:12:46 ...

  9. 如何在vmware内抓包?(一文讲明白vmware的三种网络连接方式)

    我们有时做主机之间的渗透测试,需要看网络发包的详细内容,但虚拟机内部如何抓包呢? vmware的虚拟网络编辑器有三种模式: ╔ HostOnly(仅主机) ╠ Bridge(桥接) ╚ NAT(代理) ...

  10. Host Only、NAT和Bridge三种网络连接

    Host Only.NAT和Bridge三种网络连接 在安装好了Linux镜像之后,如何连接物理机和虚拟机呢?这就需要网络连接,网络连接有三种:HostOnly.NAT.Bridge,它们都可用于Gu ...

最新文章

  1. android 横向滑动事件,android左右手势滑动事件处理
  2. PS教程第八课:新建文件
  3. python+ BeautifulSoup抓取“全国行政区划信息查询平台”的省市区信息
  4. 麦森数(洛谷P1045题题解,Java语言描述)
  5. 二季度美国新增2.4吉瓦太阳能容量
  6. Java网络通信 TCP网络,ServerSocket类
  7. 软考高项笔记 | 软技能
  8. 将mdf文件转化为excel
  9. 塔康信号matlab,干扰效能仿真,jamming effect simulation,音标,读音,翻译,英文例句,英语词典...
  10. CorelDRAW2020下载使用教程详解
  11. 假设检验1——理论基础
  12. SSM车辆综合管理系统J2EE(包含车辆驾驶员油耗年检以及维修保养百度echarts统计图表)JAVAWEB网站
  13. 在 iOS 微信浏览器中自动播放 HTML5 audio(音乐) 的正确方式
  14. Django创建app应用和admin模块
  15. 2D草图实时3D建模,可跑可跳无需手动绑定骨骼丨开源
  16. HTML5期末大作业:影评网站的设计--豆瓣以及IMDb等影评网站
  17. python正则匹配练习
  18. 火力重点转移,openstack中国行(深圳站)推出,各站欢迎讲师报名呀!
  19. linux分区方案6,linux (centos 6.4)安装自定义分区方案(转载)
  20. c语言64位long多少字节,64位操作系统下,关于int和long占用字节数同为4问题

热门文章

  1. KELL *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
  2. 求助,我在Kell官网上下载的固件库,双击运行后显示错误:Zip integrity check failed.,该怎么解决?
  3. activityMq初步使用
  4. ActivityMQ
  5. 尚硅谷大数据Hadoop(1)技术之Hadoop(入门)
  6. c语言 16进制编辑器,十六进制编辑器(010 Editor)
  7. debug error/runtime error的原因之一
  8. 安装cudnn时, library和deb模式的区别
  9. 在Xcode编译的时候,报这个错误"library not found for -
  10. 一文搞懂利用Flask-Babel实现网页多语言翻译切换