Siehe auch: Netzwerk allegemein
  1. Docker Netzerkarchitektur
  2. Adressierung der Container

Docker Netzerkarchitektur

  • der Docker-Daemon stellt ein eigenes virtuelles Netzwerk für sich und die Container her
  • das Subnetz hat standardmäßig die Adresse 172.17.x.x
  • ist dieses schon in Benutzung, weicht es im Adressbereich 172.16.x.x bis 172.30.x.x aus
  • das Host-Interface des Subnetzes auf dem Server heißt docker0 und ist sozusagen der Router zwischen den Containern, also deren Gateway
  • die Container sind alle mit dem Host-Interface verbunden
    • auf der Serverseite über ein Inteface mit dem Namen vethxxx mit docker0
    • auf der Containerseite mit dem Interface eth0
  • der Server hat im Subnetz an docker0 eine eigene IP von meistens 172.17.42.1
  • die Container haben im Subnetz an eth0 eine eigene IP von meistens 172.17.x.x
  • die IP eines Container lässt sich mit sudo docker inspect <container> abfragen und steht unter NetworkSettings.IPAddress

Adressierung der Container

vom einem beliebigen Client aus

  • befindet man sich auf dem gleichen Rechner wie der Docker-Daemon (lokale Installation), kann man das Docker-Subnetz direkt nutzen
    • die Container können direkt mit ihrer IP und die Dienste mit ihrem nativen Port angesprochen werden
  • Portmapping - Ports der Container werden mit der run-Option -p [serverPort:]containerPort oder -P auf Ports des Servers gemappt
    • das Mapping geschieht standardmäßig für alle Interfaces der Servermaschine
    • Container können indirekt über den gamapten Port des Servers und eine beliebige Netzwerkadresse des Servers aufgerufen werden
      • ist zum Beispiel der Port eines Containers auf den Port 49180 des Server gemappt, kann der Dienst z.B. über folgende Adressen aufgerufen werden
        • 0.0.0.0:49180 - über die universelle 'alle-Interfaces'-IP
        • localhost:49180 - auf dem Server selbst
        • 172.17.42.1:49180 - über das Docker-Subnetz, sofern man sich auf dem Serverhost befindet
        • 192.168.1.2:49180 - über die IP des Servers in einem beliebigen anderen Netzwerk, sofern der Client-Rechner ebenfalls damit verbunden ist

von einem anderen Container aus

  • Container können innerhalb des Docker-Subnetzes jeden anderen Container direkt adressieren
    • um innerhalb eines Containers mit einem Hostnamen eines anderen Container arbeiten zu können, gibt es die --link-Option
  • Container können über ihr Gateway, den Docker-Server, mit der Außenwelt kommunizieren
    • theoretisch können Container dann auch auf dem Server gemappte Ports anderer Container nutzen, was jedoch nicht unbedingt Sinn ergibt
Wird der docker-Daemon mit der Option --icc=false gestartet, können ausdrücklich nur Container mit einem Link miteinander kommunizieren.
Tags:
Erstellt von Thomas Steinbach am 2014/11/25 10:44
    
Copyright 2004-2019 XWiki
7.4.5