Jaki jest sens procesu dokera-proxy? Dlaczego potrzebny jest serwer proxy tcp przestrzeni użytkownika?

34

Zauważyłem, że dla każdego opublikowanego portu działa proces docker-proxy. Jaki jest cel tego procesu? Dlaczego do tego jest potrzebny serwer proxy tcp w przestrzeni użytkownika?

$ 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

oraz niektóre powiązane reguły iptable utworzone przez dokera:

$ 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
źródło
13
Nie zgadzam się na zamknięcie tego pytania. Jest to poprawny problem architektoniczny będący odgałęzieniem serverfault.com/questions/615372 ; jeśli jesteśmy w dół do głosowania, co wydaje się być un udokumentowane (przynajmniej na stronie internetowej) część serwisu, to nasuwa się pytanie, powinniśmy po prostu przejść się ślepo instalowania nowych usług i błyszczące, że nie rozumiemy wewnętrzny funkcjonowanie?
Avery Payne

Odpowiedzi:

21

Najwyraźniej istnieją pewne przypadki krawędzi bez lepszego obejścia (na razie):

  • localhost <-> routing localhost
  • instancja dokera wywołująca się za pośrednictwem opublikowanego portu
  • i ewentualnie więcej

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

AKTUALIZACJA: Od wersji 1.7.0 (16.06.2015) proxy dla użytkownika może być wyłączone na rzecz NAT-spinki do włosów za pomocą flagi demona --userland-proxy = false.

Tarnay Kálmán
źródło