Docker 代理配置由于公司 Lab 服务器无法正常访问公网,想要下载一些外部依赖包需要配置公司的内部代理 。Docker 也是同理,想要访问公网需要配置一定的代理 。
Docker 代理分为两种,一种是为运行的 Container 配置代理,用于下载一些依赖包以及访问公网 。另一种是为 Docker Daemon 配置代理,用于支持 docker 相关的命令 。
文章插图
一、为容器配置代理配置容器代理一般分为两种,一种是全局配置,另一种是仅为某个容器配置 。
1. 全局配置
首先说明,此修改方法仅支持 17.07 或者更高版本 。
修改或创建 ~/.docker/config.json
# 如果有的话,先备份一下cp ~/.docker/config.json ~/.docker/config.json.bk# 修改内容如下cat ~/.docker/config.json{"auths": {},"HttpHeaders": {"User-Agent": "Docker-Client/19.03.2 (linux)"},"proxies":{"default":{"httpProxy": "http://173.39.112.117:80","httpsProxy": "http://173.39.112.117:80"}}}
【一文详解Docker 代理脱坑】为了确保生效,重启下 docker :systemctl restart docker此时宿主机并没配置代理,查询下 IP:
[root@localhost ~]# curl cip.ccIP: 64.104.xxx.xx地址: 中国香港cisco.com数据二: 香港 | 特别行政区数据三: 中国香港URL: http://www.cip.cc/64.104.xxx.xx
基于之前使用 Docker file 打包镜像的文章,直接使用打包好带有 systemd 功能的镜像 。# 创建 container[root@localhost home] docker run --privileged=true -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 -d local/c7-systemd# 进入 container[root@localhost home] docker exec -it 3eaa1cc71706 /bin/bash# 查询 IP[root@3eaa1cc71706 /]# curl cip.ccIP: 173.39.112.xxx地址: 新加坡新加坡数据二: 新加坡数据三: 新加坡URL: http://www.cip.cc/173.39.112.xxx
可以看到容器内已经成功配置了代理,可以正常下载依赖了 。2. 局部修改
方法1-在 docker run 命令添加参数
# 创建 containerdocker run --privileged=true -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro --env HTTP_PROXY="http://173.39.112.117:80 --env HTTPS_PROXY="http://173.39.112.117:80 --env http_proxy="http://173.39.112.117:80 --env https_proxy="http://173.39.112.117:80 -p 80:80 -d local/c7-systemd# 进入 container[root@localhost home]# docker exec -it 3607976e8f2d /bin/bash# 查询 IP[root@3607976e8f2d /]# curl cip.ccIP: 173.39.112.xxx地址: 新加坡新加坡数据二: 新加坡数据三: 新加坡URL: http://www.cip.cc/173.39.112.xxx
方法2-在 Docker-file 添加这里以打包一个 httpd 的 docker file 为例子:
FROM local/c7-systemdENV MY_PROXY_URL="http://173.39.112.117:80"ENV HTTP_PROXY=$MY_PROXY_URLHTTPS_PROXY=$MY_PROXY_URLFTP_PROXY=$MY_PROXY_URLhttp_proxy=$MY_PROXY_URLhttps_proxy=$MY_PROXY_URLftp_proxy=$MY_PROXY_URLRUN yum -y install httpd; yum clean all; systemctl enable httpd.serviceEXPOSE 80CMD ["/usr/sbin/init"]
结果是相同的,这里就不演示了 。有时添加代理是域名的话,就需要额外的操作 。3. 添加代理是域名的处理
如果添加的代理是域名的话,如 proxy.esl.cisco.com:80, 需要再做一步额外的处理 。
方法1-通过 docker run 参数添加
# 创建 container[root@localhost home]#docker run --privileged=true -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro --env HTTP_PROXY="http://proxy.esl.cisco.com:80 --env HTTPS_PROXY="http://proxy.esl.cisco.com:80 --env http_proxy="http://proxy.esl.cisco.com:80 --env https_proxy="http://proxy.esl.cisco.com:80 --DNS=64.104.123.245 -p 80:80 -d local/c7-systemd# 进入 container[root@localhost home]# docker exec -it 992dc27de1cc /bin/bash# 查看 IP[root@992dc27de1cc /]# curl cip.ccIP: 173.39.xxx.xxx地址: 新加坡新加坡数据二: 新加坡数据三: 新加坡URL: http://www.cip.cc/173.39.xxx.xxx
方法2-通过修改 docker daemon 配置添加在每个 container 运行前,会继承 Docker daemon 的配置,在 /etc/docker/daemon.json 文件下.
# 为 docker daemon 添加 dns,在运行时会为每个 container 添加上cat /etc/docker/daemon.json{"dns" : ["8.8.4.4","8.8.8.8","Your_DNS_SERVER"],"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
效果一样这里就不演示了 。二、为 Docker Daemon 添加代理和 container 的情况一样,如果不为 Docker Daemon 配置代理的话,是无法使用 search, pull, push 等命令的 。
配置如下:
# STEP1-创建文件夹[root@localhost home]# sudo mkdir -p /etc/systemd/system/docker.service.d# STEP2-创建代理文件 http 和 https[root@localhost home]# cat /etc/systemd/system/docker.service.d/http-proxy.conf[Service]Environment="HTTP_PROXY=http://proxy.esl.cisco.com:80/"[root@localhost home]# cat /etc/systemd/system/docker.service.d/https-proxy.conf[Service]Environment="HTTPS_PROXY=http://proxy.esl.cisco.com:80/"# 如果希望访问某些 Docker registries 不是用代理,可以在上面的配置文件后追加[Service]Environment="HTTP_PROXY=http://proxy.example.com:80/" "NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"# STEP3-刷新变更[root@localhost home]# sudo systemctl daemon-reload# STEP4-重启 Docker[root@localhost home]# sudo systemctl restart docker# STEP5-验证代理是否生效[root@localhost home]# systemctl show --property=Environment dockerEnvironment=HTTP_PROXY=http://proxy.esl.cisco.com/ HTTPS_PROXY=http://proxy.esl.cisco.com:80/
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- docker 复制漏洞,让渗透更加艺术化
- 一文看懂全排列算法
- Redis详解:原理和机制
- 详解限流算法,图示漏桶算法与令牌桶算法
- Oracle用户进程和后台进程详解
- 什么是青砖茶,青砖茶的特点是什么
- 全部取材自真实受骗经历!一文揭秘普洱的7大造假手法
- 一文带你了解 HTTP 黑科技
- 一文教会你如何申请ios开发者账号
- 史上最详细的Linux网卡ifcfg-eth0配置详解