为Docker配置代理 - 详解Docker的三种网络代理配置
为Docker配置代理 - 详解Docker的三种网络代理配置
Docker Client – 代理访问远程的 Docker Daemon
Docker 的 Client
和 Daemon
端是可以不在同一个机器上的, 可以通过 docker -h
连接其他的 Docker Daemon
在 Client
端设置代理其实就是设置 Linux
系统的代理, 从而让系统的命令行可以通过代理连接到外部的网络。一般只需要配置 HTTP_PROXY
与 HTTPS_PROXY
这两个即可。
1 | # 临时方案 |
Docker Daemon – 代理拉取或推送国外镜像
!!!注意
Docker 守护程序 (dockerd) 是在其启动环境中使用 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 环境变量来配置 HTTP 或 HTTPS 代理行为
需要在 Docker systemd 服务文件中添加此配置
在 daemon.json
文件或者是在系统环境变量文件中配置它们都不会使其生效
在 /etc/systemd/system
目录下创建 docker.service.d
目录, 创建 http-proxy.conf
配置文件
1 | mkdir -p /etc/systemd/system/docker.service.d |
Container – 容器内部代理访问国外资源
参考 Docker 官方文档:Configure Docker to use a proxy server
!!!注意
该代理只针对于后续 build 或 run 的容器有效, 已经创建好的不受影响
容器就可以当做一个简化版的 Linux 系统, 如果想实现容器内部的代理, 则必须在容器内设置适当的环境变量
- 直接在容器内部进行修改, 虽然也可以这样做, 但是不是很推荐, 如果不是测试使用, 最好还是保证容器的完整性, 如果是想要将该容器导出并移植到其他机器上去的话, 那肯定是在容器内部修改环境变量导出
- 在 Docker 17.06 及更早版本中, 可以在构建映像(这会降低映像的可移植性)或创建或运行容器时通过指定参数来执行此操作
- 在 Docker 17.07 及更高版本中, Docker 提供了一个全局的配置, 可以通过配置 Docker 客户端以自动将代理信息传递给容器, 从而让所有的容器内部都支持代理访问
Docker 17.07 及更高版本中的全局配置:
1 | vim ~/.docker/config.json |
HTTP_PROXY
用于代理访问 http
请求, HTTPS_PROXY
用于代理访问 https
请求, 如果想某个IP或域名不走代理则配置到 NO_PROXY
中。
如果确实只是为容器配置临时的代理, 或者只为某个特定的容器设置代理, 可以使用docker-compose
的配置文件或者容器内执行命令
在docker-compose
中配置代理
1 | environment: |
临时使用, 在容器内执行
1 | sh -c "export http_proxy=http://192.168.62.164:8081 && export https_proxy=http://192.168.62.164:8081" |
参考资料
[1] 详解 Docker 的三种网络代理配置 - Roc’s Blog (2024_7_31 10_47_08).html
[2] Docker 配置代理 - SnailRush - 博客园 (2024_7_31 10_47_32).html
[3] docker设置代理解决内网pull外网镜像_docker pull 代理-CSDN博客 (2024_7_31 10_46_34).html