Wozu dient der Docker-Proxy-Prozess? Warum wird ein Userspace-TCP-Proxy benötigt?

34

Ich habe festgestellt, dass für jeden veröffentlichten Port ein Docker-Proxy-Prozess ausgeführt wird. Was ist der Zweck dieses Prozesses? Warum wird dafür ein User Space TCP Proxy benötigt?

$ ps -Af | grep proxy
root      4776  1987  0 01:25 ?        00:00:00 docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 22222 -container-ip 172.17.0.2 -container-port 22
root      4829  1987  0 01:25 ?        00:00:00 docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 5555 -container-ip 172.17.0.3 -container-port 5555

und einige verwandte iptable-Regeln, die von docker erstellt wurden:

$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 1 packets, 263 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT 1 packets, 263 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1748 packets, 139K bytes)
 pkts bytes target     prot opt in     out     source               destination         
   32  7200 DOCKER     all  --  *      *       0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT 1719 packets, 132K bytes)
 pkts bytes target     prot opt in     out     source               destination         
   32  7200 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0           

Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            127.0.0.1            tcp dpt:22222 to:172.17.0.2:22
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            127.0.0.1            tcp dpt:5555 to:172.17.0.3:5555
Tarnay Kálmán
quelle
13
Nicht einverstanden über das Schließen dieser Frage. Es handelt sich um ein gültiges Architekturproblem, das ein Ableger von serverfault.com/questions/615372 ist . wenn wir nach unten Abstimmung , was scheint eine zu un dokumentiert (zumindest auf der Website) Teil des Dienstes, dann ist das wirft die Frage auf , sollten wir einfach gehen um blind Installation neu und glänzend Dienstleistungen , die wir nicht verstehen , die internen Funktionsweise von?
Avery Payne

Antworten:

21

Anscheinend gibt es einige Randfälle ohne eine bessere Problemumgehung (für den Moment):

  • localhost <-> localhost routing
  • Docker-Instanz, die über ihren veröffentlichten Port in sich selbst aufruft
  • und möglicherweise mehr

https://github.com/docker/docker/issues/8356

UPDATE: Seit 1.7.0 (2015-06-16) kann der Userland-Proxy zu Gunsten von Haarnadel-NAT deaktiviert werden, indem das Flag --userland-proxy = false des Daemons verwendet wird.

Tarnay Kálmán
quelle