如何正确地为Docker容器设置代理
概述
为 Docker 容器设置代理有两种方式,原理都是设置环境变量。
假设: 宿主网络下的 7890 端口提供了代理服务。
宿主 ip
host.docker.internal
是 Docker Desktop 提供的特殊 DNS 名称,用于映射到宿主机的 IP 地址。
如果是 Linux 系统可能需要
--add-host host.docker.internal:host-gateway
此外,直接使用宿主的内网 ip 当然也可以
常见的方式是使用 docker 创建的网卡 docker0
的 ip: 172.17.0.1
设置环境变量
容器的网络代理,也可以直接在其运行时通过 -e
传入 http_proxy
等环境变来设置。
这种方式适合服务器部署应用。
1 | docker run -e "http_proxy=http://宿主ip:7890" \ |
当然,也可以直接使用 --network=host
,让容器直接使用宿主的网络空间,那么 host.docker.internal
就可以改成 127.0.0.1
。
Docker 配置文件
这种方式下,Docker 容器运行时会自动传入配置的环境变量,适合个人本地配置,且只在 Docker 17.07 及以上版本生效。
修改 ~/.docker/config.json
文件
1 | { |
测试代理情况
进入容器,请求查询 ip 归属地判断是否成功使用代理。
1 | wget https://www.ip.cn/api/index?ip=&type=0 |
补充
我曾想通过 SSH 远程端口转发,将自己电脑上的代理服务端口转发到云服务器上,然后再设置云服务器中 Docker 容器代理使用 SSH 转发后的端口。
但不知道什么原因,无法连通 172.17.0.1
。使用 --add-host host.docker.internal:host-gateway
和 host.docker.internal
结果也一样。
虽然不爽,但还是老老实实的用 --network=host
吧。
如何正确地为Docker容器设置代理
https://akichase.top/2024/01/07/技术/Docker/如何正确地为Docker容器设置代理/