我在公司代理后面。为了在不设置http_proxy
或https_proxy
的情况下从互联网上使用Docker容器,我使用nclarier/redsocks docker容器。
如果我通过运行docker run --privileged=true --net=host -d ncarlier/redsocks proxy.domain.com 8080
然后运行另一个容器(例如docker run -it ubuntu bash
,然后在ubuntu容器内执行curl google.com
)来使用它,一切都很好。
但是如果我将这些容器与docker-compose一起使用,则第二个容器无法访问互联网/不使用代理服务器。
这是Yaml:
version: '3'
services:
proxy:
image: ncarlier/redsocks
command: proxy.domain.com 8080
privileged: true
network_mode: "host"
othercontainer:
image: ubuntu
depends_on:
- "proxy"
network_mode: "host"
stdin_open: true
tty: true
Docker撰写有什么不同吗?是否需要一些特殊属性? Nclarier / redsocks图像使用iptables路由流量,我高度怀疑这是断点。
答案 0 :(得分:0)
问题本身与docker-compose
无关,它只是浮出水面。
docker-compose
为它旋转的容器创建自己的桥接网络,即使您未指定它也是如此。
nclarier/redsocks映像创建iptable规则以通过其代理路由流量,它通过指定接口-docker0
(恰好是网桥网络)来实现此目的。
如果不指定接口,则一切都很好。来自每个可以访问Internet的网络的所有流量都通过redsocks代理进行路由。
我为图片创建了PR,希望对其他人也有所帮助。