![强制 Docker Swarm / Docker 仅侦听特定 IP 而不是 0.0.0.0](https://linux22.com/image/157291/%E5%BC%BA%E5%88%B6%20Docker%20Swarm%20%2F%20Docker%20%E4%BB%85%E4%BE%A6%E5%90%AC%E7%89%B9%E5%AE%9A%20IP%20%E8%80%8C%E4%B8%8D%E6%98%AF%200.0.0.0.png)
背景:我在 Hetzner 有一个专用服务器,在端口 80 / 443 上运行 Apache2,现在我添加了另一个也属于 eth0 接口的 IP。我可以访问并 ping 该 IP 地址。我已将 Apache2 配置为仅侦听服务器的主 IP,并且我想将新 IP 用于 Docker Swarm Traefik Ingress...
我计划实施这个设置:https://docs.traefik.io/user-guide/cluster-docker-consul/(如果可行的话我计划添加更多额外的IP)
然而,这似乎不起作用。我已经设置"ip":"<newip>"
了/etc/docker/daemon.json
Docker 只是告诉我它不在乎(即使我在文件中指定了 IP traefik.yml
:
~ # docker stack deploy -c traefik.yml traefik-consul
WARN[0000] ignoring IP-address (138.201.xx.xx:80:80/tcp) service will listen on '0.0.0.0'
WARN[0000] ignoring IP-address (138.201.xx.xx:443:443/tcp) service will listen on '0.0.0.0'
此外,它只是将一些令人讨厌的 DNAT 规则扔进 iptables 并抵制我的想法:
# iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 6 packets, 490 bytes)
pkts bytes target prot opt in out source destination
1474K 111M DOCKER-INGRESS all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
1198 72892 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
...
Chain DOCKER-INGRESS (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED tcp spt:443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED tcp spt:80
一定有办法吗?或者只是不支持这种情况?有任何想法吗?提示?
答案1
无法在主机上的特定 IP 上发布堆栈容器端口。关于此有许多未解决的问题:
- https://github.com/moby/moby/issues/32299
- https://github.com/moby/moby/issues/35318
- https://github.com/moby/moby/issues/26696
目前,使用 Swarm 模式时,端口始终会在 0.0.0.0 主机地址上发布。
还有你的链接(https://docs.traefik.io/user-guide/cluster-docker-consul/)是404。