Docker代理详解解决容器访问问题
一、Docker daemon ( Docker 守护进程 )Http代理配置
在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。
1 | sudo mkdir -p /etc/systemd/system/docker.service.d |
在这个http-proxy.conf(可以是任意*.conf的形式)文件中,添加以下内容:
1 | [Service] |
重启 docker
1 | systemctl restart docker |
二、Container (容器)Http代理配置
1.全局配置
在容器运行阶段,如果需要代理上网,则需要配置~/.docker/config.json。以下配置,只在Docker 17.07及以上版本生效。
1 | { |
重启 docker
1 | systemctl restart docker |
这个是用户级的配置,除了proxies,docker login等相关信息也会在其中。而且还可以配置信息展示的格式、插件参数等。
此外,容器的网络代理,也可以直接在其运行时通过-e注入http_proxy等环境变量。这两种方法分别适合不同场景。config.json非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用-e注入这种显式配置会更好,减轻对构建、部署环境的依赖。
2.局部修改
在 docker run 命令添加参数
1 | docker run -d -p 9000:8080 -p 9001:50000 -v /data/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -u root \ |
三.代理为域名时的特殊处理
如果添加的代理是域名的话,如 proxy.neu.com:80, 需要再做一步额外的处理。
1.全局修改-通过修改 docker daemon 配置添加
在每个 container 运行前,会继承 Docker daemon 的配置,在 /etc/docker/daemon.json 文件下.
1 | 为 docker daemon 添加 dns,在运行时会为每个 container 添加上 |
2.局部修改-通过 docker run 参数添加
1 | docker run -d -p 9000:8080 -p 9001:50000 -v /data/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -u root \ |