Networking

強制 Docker Swarm / Docker 只監聽特定 IP 而不是 0.0.0.0

  • April 18, 2022

背景:我在 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 上發布堆棧容器埠。有很多關於此的未解決的問題:

目前,當使用 swarm 模式時,埠總是會發佈在 0.0.0.0 主機地址上。

您的連結(https://docs.traefik.io/user-guide/cluster-docker-consul/)也是 404。

引用自:https://unix.stackexchange.com/questions/530617