docker: 没有链接的网络

docker: networking without linking

我在一台主机上有以下设置 运行:

配置nginx代理到"localhost:$EXPOSED_OR_NATIVE_PORT"时,这不起作用,因为nginx无法连接到这个端口。 我必须如何配置 docker 化的 nginx 才能充当容器和标准服务的代理?

将 nginx 与 docker webserives 链接可能是一种解决方案,尽管我不喜欢将所有容器链接到 nginx 的想法。这并没有解决问题,这个 nginx 也应该作为这个主机上标准服务的反向服务。

任何idea/recommendation?

谢谢

如果你的 nginx 是 dockerized 并且你想访问其他容器或主机你应该使用主机 ip 而不是本地主机。默认值为 172.17.42.1,可在此处阅读 https://docs.docker.com/articles/networking/

所以你应该代理到:

proxy_pass http://172.17.42.1:$EXPOSED_OR_NATIVE_PORT;

在尝试了很多东西之后回答自己。我希望这对某人有所帮助。

我有以下过程: 正如@Ben 提到的,使用网桥 ip 有帮助,一切都很好。
但后来我意识到,此设置不适用于 ubuntu 上的 UFW,并且每个 docker 容器 运行 的每个暴露端口都可以从互联网访问。
原因是 docker 正在摆弄 iptables,这与 UFW 生成的 iptables 规则冲突。 在我看来非常危险。 为了解决这个问题,我用 DOCKER_OPTS="--iptables=false" 启动了 docker 守护进程。这解决了全球可达的公开 docker 端口的问题。但是现在我无法从 ngix 容器再次访问 docker 容器。这是 @Bryan 提供帮助的地方:以 --net host 开头的容器可以访问本地主机和所有公开的端口。
最后一步是必要的:需要添加此 iptables 规则才能从 docker 容器中访问 www:iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE

LG 达奇

如果您希望容器内的 nginx 代理主机上的服务,您可以 运行 那个容器 --net=host,这样它就不会放在网络名称空间内并访问主机的直接网络接口。