Docker container koennen sich nicht Gegenseiting pingen.

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
Lord_Carlos
Beiträge: 4442
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Docker container koennen sich nicht Gegenseiting pingen.

Beitrag von Lord_Carlos » 01.07.2018 15:20:07

Hi

Ich habe ein paar Programme via Docker am laufen. z.B. ein IRC bouncer und dns server (pi-hole)

Ich kann mich mit dem IRC bouncer verbinden, der IRC bouncer macht ein NSlookup, meldet aber "Can't resolve server hostname"
Oder einfacher:

Code: Alles auswählen

docker run busybox nslookup google.com
Server:    sudo ip link
Address 1: 192.168.1.146

nslookup: can't resolve 'google.com'
Im DNS log sehe ich aber:

Code: Alles auswählen

Jul  1 13:05:36 dnsmasq[762]: 1357 172.18.0.1/40832 query[A] google.com from 172.18.0.1
Jul  1 13:05:36 dnsmasq[762]: 1357 172.18.0.1/40832 cached google.com is 172.217.17.78
Wenn ich direkt mein router als docker DNS benutzte:

Code: Alles auswählen

docker run --dns 192.168.1.1 busybox nslookup google.com
Address 1: 2a00:1450:400e:805::200e ams16s30-in-x0e.1e100.net
Address 2: 172.217.17.78 ams16s30-in-f14.1e100.net
Da der DNS server auch auf dem gleichen host in einem docker laeuft geht da vielleicht was schief mit dem Netzwerk?
Router: 192.168.1.1
Server: 192.168.1.146
docker bridge? 172.18.0.1 <-- hier kenne ich mich nicht so aus.

Code: Alles auswählen

sudo brctl show
bridge name     bridge id               STP enabled     interfaces
br-8436bfe729b0         8000.0242a58053b5       no              veth08427e8
                                                        veth1669730
                                                        veth6d39df2
                                                        veth7ee9389
                                                        veth970a291
docker0         8000.0242120cc008       no
Das ganze hat mal funktioniert. Ich vermute wenn ich neustarte geht es auch wieder ein wenig.
Aber wuerde trotzdem gerne die Ursache finden.

Edit: Ah, ok:
Sieht so aus als wenn die Container sich nicht pingen koennen.

Code: Alles auswählen

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pihole
172.18.0.5

docker run --dns 172.18.0.5 busybox nslookup google.com 
nslookup: can't resolve 'google.com'

docker run busybox ping -c 1 172.18.0.5
1 packets transmitted, 0 packets received, 100% packet loss
Aber warum?
docker network inspect bridge
"com.docker.network.bridge.enable_icc": "true",

Mit ICC true sollten die sich doch sehen, oder nicht?

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

BenutzerGa4gooPh

Re: Docker container koennen sich nicht Gegenseiting pingen.

Beitrag von BenutzerGa4gooPh » 01.07.2018 20:47:09

Ich kenne mich mit Docker-Containern und IRC bouncer nicht aus.
Gibt es einen speziellen Grund für ein weiteres Netzwerk dafür?
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.07.2018 15:20:07
Router: 192.168.1.1
Server: 192.168.1.146
docker bridge? 172.18.0.1 <-- hier kenne ich mich nicht so aus.
Gib doch mal der Bridge eine freie Adresse ausserhalb deines DHCP-Pools (siehe im Router) aus dem auch sonst genutzten Netz 192.168.1.0/24. Gebridgten Containern bei Bedarf auch. (Ohne Tricks erreichen sich Hosts in unterschiedlichen Netzen nur durch Routing. Jedenfalls auf Ebene IP/Layer 3.)

Benutzeravatar
Lord_Carlos
Beiträge: 4442
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Docker container koennen sich nicht Gegenseiting pingen.

Beitrag von Lord_Carlos » 01.07.2018 21:07:01

Die container koennen ja mein netzwerk erreichen.
Aber untereinander anscheinend nicht.
Das sollte eigentlich gehen wenn enable_icc": auf "true" gesetzt ist.

Host kann container pingen, und container koennen den host pingen. Aber container kann kein anderen host pingen.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Benutzeravatar
heisenberg
Beiträge: 1535
Registriert: 04.06.2015 01:17:27

Re: Docker container koennen sich nicht Gegenseiting pingen.

Beitrag von heisenberg » 02.07.2018 07:41:02

Ich bin ja jetzt auch der Docker-Neuling. Aber hast Du's mal mit der link-Option von docker-run verwendet? (Ich lese gerade aber auch, dass das deprecated ist)
Die Welt und die Menschen brauchen Dich! Engagiere Dich für den Klimaschutz!

JTH
Beiträge: 476
Registriert: 13.08.2008 17:01:41

Re: Docker container koennen sich nicht Gegenseiting pingen.

Beitrag von JTH » 02.07.2018 11:18:50

Hast du evtl. das busybox-Image bei dir lokal verändert?

Diese Zeilen aus dem ersten Beitrag
Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
01.07.2018 15:20:07

Code: Alles auswählen

Server:    sudo ip link
Address 1: 192.168.1.146
(besonders das sudo ip link) sehen etwas merkwürdig aus. Im frisch gepullten busybox-Image taucht da einfach Googles DNS-Server auf:

Code: Alles auswählen

Server:    8.8.8.8
Address 1: 8.8.8.8 google-public-dns-a.google.com

Benutzeravatar
Lord_Carlos
Beiträge: 4442
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Docker container koennen sich nicht Gegenseiting pingen.

Beitrag von Lord_Carlos » 02.07.2018 12:10:37

Link habe ich noch nicht benutzt, eben weil depricated. Mach ich vielleicht mal.
Busybox habe ich nicht veraendert. Normal nimmt docker den DNS der Host resolv.conf, ich sehe ja auch das die resolve anfrage ankommt.

Hier hat einer das gleiche Problem: https://www.reddit.com/r/docker/comment ... _but_cant/

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Benutzeravatar
heisenberg
Beiträge: 1535
Registriert: 04.06.2015 01:17:27

Re: Docker container koennen sich nicht Gegenseiting pingen.

Beitrag von heisenberg » 15.02.2019 16:29:13

Zum Thema docker und "link" was deprecated ist. Alternative ist einen Netzwerknamen zu nehmen. Das ist wider erwarten recht einfach.

z. B. so:

Code: Alles auswählen

docker run --network my-network
Alle Container mit dem Netzwerk "my-network" sehen sich gegenseitig.

Mit docker-compose(Eine Abstraktionsschicht oben drüber) geht's auch recht einfach. Hier ein Beispiel mit den betreffenden Direktiven einer docker-compose.yml:

Code: Alles auswählen

services:
  container_a:
   networks:
      - my_network

  container_b:
    networks:
      - my_network

networks:
  my_network:
Die Welt und die Menschen brauchen Dich! Engagiere Dich für den Klimaschutz!

Antworten