[求助] docker 容器如何使用本机容器外的 http_proxy

305 天前
 leverestfish

网络小白来求助一下:代理是在本机的 7890 端口,请问如何在同一个机器的 docker 容器内通过代理来访问网络?

直接 export http\_proxy=127.0.0.1:7890; ... 显然是不行的

按照官网文档尝试了使用/etc/systemd/system/docker.service.d/http-proxy.conf 好像并不管用

也按照这个stack overflow的方法试了一下,可以 ping 通 172.17.0.2 ( ifconfig 显示的 ip ),但是并不能使用 7890 端口

备注:系统是 ubuntu (代理用的是 cfw ),docker 是 centos 镜像

感谢!

1814 次点击
所在节点    程序员
18 条回复
yangyaofei
305 天前
这个里面有 https://docs.docker.com/network/proxy/

其实最简单的方法是直接 cfw 开启 tun 模式,就好了
ShineyWang
305 天前
httpproxy=127.0.0.1:7890
这里的 127.0.0.1 改成本机的局域网 IP(这个 IP 才能让 docker 内的容器直接访问)
设置后可以通过 CURL google 测试连接
Achilless
305 天前
简单点,clash 开 tunnel 模式就完了
leverestfish
305 天前
@ShineyWang #2 我用 ip addr show docker0 命令看到宿主机的局域网 ip 是 172.17.0.1 ,但是我在 docker 里面加载代理之后 curl 会得到 Failed to connect to 172.17.0.1 port 7890: Connection refused ,确认过本机 127.0.0.1:7890 直接 curl google 是没有问题的,好奇怪,难道是启动 docker 容器的时候要加什么参数吗…… 参考了这个教程 https://jingsam.github.io/2018/10/16/host-in-docker.html
leverestfish
305 天前
@yangyaofei #1 tun 模式开启之后还需要其他相应操作吗
token10086
305 天前
mac export https_proxy=http://host.docker.internal:1081;export http_proxy=http://host.docker.internal:1081;export all_proxy=socks5://host.docker.internal:1081

linux 替换成 172.17.0.1
cc666
305 天前
关键字:host.docker.internal ,docker 内部访问这个网址即访问 docker 宿主机地址
leverestfish
305 天前
@Achilless #3 @yangyaofei #1 确实可以了! nb !
leverestfish
305 天前
@token10086 #6 四楼试过了,不行
ShineyWang
305 天前
@leverestfish #4 在我的环境中
本机(开启 Clash 的 windows),docker(linux)以及 docker 启动的 container 是三个系统;分别有三个 IP
docker 主机一般不需要代理,假如部分 image 拉取过慢可以开代理

一般是 container 需要代理,这个代理可以通过 docker start 的时候注入环境变量来开启
启动参数一般加-e HTTPS_PROXY="http://dockernew.local:7890" -e HTTP_PROXY="http://dockernew.local:7890"就可以

加了参数后可以到 container 里面 curl 判断实际情况

假如不通,需要测试 clash 的配置有没有问题,clash 有没有开启 allow lan ;IP 对不对
yangyaofei
305 天前
@leverestfish #5 开了 TUN 了之后就都能用了, docker 的文档里面的那个只能是 container 里面用代理, 但是 pull 镜像的时候没用, 所以还是 TUN 最无脑. 还有如果不用 tun 用 export 代理从 localhost 替换成 host.docker.internal 就好了, 有对应的文档.
leverestfish
305 天前
@ShineyWang #10 破案了!就是因为忘记开 allow LAN 了,感谢!!
julyclyde
305 天前
从/etc/systemd/system/docker.service.d/ 可以看出,你不太分得清容器内和容器服务这俩东西
hzfyjgw
305 天前
root@xxxx:~# cat /etc/systemd/system/containerd.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.x.xx:7890" "HTTPS_PROXY=http://192.168.x.xx:7890"
julyclyde
305 天前
@hzfyjgw 应该是小写吧?
以及,这里的环境变量是给 containerd 用的( pull image )而不是给容器内运行环境用的吧
juicer
305 天前
我用的是 1 楼链接里的方法,对于没有安装 clash 的主机很有用。
cxtrinityy
305 天前
最简单的就是代理 listen 在本机 docker ip 的端口即可让 docker 内的应用使用
stcode
305 天前
我在 debian11 用 exprot 添加代理,代理是局域网机器,docker 可以访问.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX