Docker-Container kann von einem anderen Docker-Container aus nicht über die Host-IP erreicht werden

Docker-Container kann von einem anderen Docker-Container aus nicht über die Host-IP erreicht werden

Ich habe einen Server, auf dem ein Wireguard-VPN läuft, 10.0.1.254/24und Docker läuft auf 172.17.0.1/16.

Meines docker-compose.yamlsieht so aus (vereinfacht):

services:
  container_a:
    image: nginx:latest
    ports:
      - '10.0.1.254:80:80'

  container_b:
    image: alpine:latest

Jetzt kann ich nginx über wget http://10.0.1.254auf dem Host erreichen. Auf die gleiche Weise kann ich es auch von einem VPN-Peer aus erreichen (z. B. 10.0.1.1). Aber wenn ich versuche, dies von einem anderen Docker-Container aus zu tun (z. B. docker compose exec container_b wget http://10.0.1.254), erhalte ich ein Timeout. Ich kann den Host jedoch anpingen ( docker compose exec container_b ping 10.0.1.254).

Ich vermute, dass dies etwas mit der Art und Weise zu tun hat, wie Docker Ports auf dem Host zuordnet. Aber ich kann dazu nicht viele Informationen finden. Weiß jemand, warum das nicht funktioniert?

Antwort1

Es stellte sich heraus, dass ich immer noch UFW installiert hatte, das so konfiguriert war, dass eingehende Verbindungen zu diesem Port der wg0Schnittstelle zugelassen wurden. Das System war jedoch intelligent genug, eine Abkürzung zu nehmen, direkt von einer virtuellen Docker-Schnittstelle zur anderen, und diese ACCEPT-Regel für die wg0Schnittstelle zu umgehen.

Ich habe dies herausgefunden tail +1f /var/log/ufw.log, indem ich verwendet und dann den fehlgeschlagenen wgetBefehl vom anderen Docker-Container aus ausgeführt habe.

In meinem Fall bestand die Lösung darin, UFW ( sudo ufw disable) einfach zu deaktivieren, da ich es sowieso nicht verwende.

verwandte Informationen