it-swarm.com.de

Netzwerk ist innerhalb des Docker-Containers ohne --net = Host-Parameter nicht erreichbar

Problem : Im Docker-Container ist keine Internetverbindung vorhanden.

Symptome : ping 8.8.8.8 funktioniert nicht. Wireshark from Host System gibt zurück:

 19 10.866212113   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=0/0, ttl=64
 20 11.867231972   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=1/256, ttl=64
 21 12.868331353   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=2/512, ttl=64
 22 13.869400083   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=3/768, ttl=64

Aber ! Wenn Container mit --net=Host gestartet wurde, funktioniert das Internet einwandfrei.

Was ich bisher ausprobiert habe: 

  • DNS ändern
  • hinzufügen von --ip-masq=true zu /etc/default/docker (mit Neustart deaktiviert)
  • aktivieren Sie alles, was mit Masquerade/ip_forward zusammenhängt
  • standardroute ändern
  • alles vorgeschlagen hier

Host-Konfiguration:

$ Sudo route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.4.2.1      0.0.0.0         UG    0      0        0 eno1.3001
default         10.3.2.1      0.0.0.0         UG    100    0        0 eno2
10.3.2.0      *               255.255.254.0   U     100    0        0 eno2
10.4.2.0      *               255.255.254.0   U     0      0        0 eno1.3001
nerv8.i         10.3.2.1      255.255.255.255 UGH   100    0        0 eno2
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0

Sudo iptables -L, cat /etc/network/interfaces, ifconfig, iptables -t nat -L -nv 

Alles ist gut, das Weiterleiten ist auch aktiviert:

$ Sudo sysctl net.ipv4.ip_forward 
net.ipv4.ip_forward = 1
13

Dies ist die nicht vollständige Antwort, die Sie suchen. Ich möchte aber gerne erklären, warum das Internet funktioniert 

Wenn der Container mit --net = gestartet wurde, würde das Host-Internet einwandfrei funktionieren.

Docker unterstützt standardmäßig drei Netzwerke . In diesem Modus (Host) Container wird der Netzwerkstack des Hosts gemeinsam genutzt, und alle Schnittstellen vom Host sind für den Container verfügbar . Der Hostname des Containers stimmt mit dem Hostnamen auf dem Hostsystem überein

# docker run -it --net=Host ubuntu:14.04 /bin/bash
[email protected]:/# hostname
labadmin-VirtualBox
Even the IP configuration is same as the Host system's IP configuration
[email protected]:/# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
[email protected]:/# exit
exit

Host SYSTEM IP-KONFIGURATION

# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 

Siehe dies für weitere Informationen zum Docker-Netzwerk.

4
Here_2_learn

Können Sie "Sudo ifconfig" ausführen und sehen, ob der IP-Bereich für Ihre Internetverbindung (normalerweise wlan0) mit dem Bereich für die Docker0-Schnittstelle 172.17.0.0 kollidiert?

Ich hatte dieses Problem mit meinem Büronetzwerk (während es zu Hause gut funktionierte), das auf 172.17.0.X ausgeführt wurde, und Docker versuchte genau diesen Bereich auszuwählen.

Dies könnte hilfreich sein: http://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/

Am Ende habe ich ein eigenes Bridge-Netzwerk für Docker aufgebaut.

0
Laszlo Fogas

Stellen Sie sicher, dass net.ipv4.conf.all.forwarding (nicht net.ipv4.ip_forward) auf 1 gesetzt ist. Wenn nicht, schalten Sie ihn ein:

$ sysctl net.ipv4.conf.all.forwarding

net.ipv4.conf.all.forwarding = 0

$ sysctl net.ipv4.conf.all.forwarding=1

$ sysctl net.ipv4.conf.all.forwarding

net.ipv4.conf.all.forwarding = 1
0
Camilo Silva