Networking
強制 Docker Swarm / Docker 只監聽特定 IP 而不是 0.0.0.0
背景:我在 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 只是告訴我它不在乎(即使我在
traefik.yml
文件中指定了 IP:~ # 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-Rule 放入 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
一定有辦法嗎?還是不支持這種情況?有任何想法嗎?提示?
無法在主機上的特定 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。