게시 된 각 포트마다 docker-proxy 프로세스가 실행되고 있음을 알았습니다. 이 과정의 목적은 무엇입니까? 여기에 사용자 공간 TCP 프록시가 필요한 이유는 무엇입니까?
$ 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
docker가 만든 일부 관련 iptable 규칙 :
$ 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
답변
더 나은 해결 방법이없는 일부 경우가 있습니다 (현재).
- localhost <-> localhost 라우팅
- 게시 된 포트를 통해 자체적으로 호출되는 도커 인스턴스
- 그리고 아마도 더
https://github.com/docker/docker/issues/8356
업데이트 : 1.7.0 (2015-06-16) 이후 데몬의 –userland-proxy = false 플래그를 사용하여 헤어핀 NAT를 위해 userland 프록시를 비활성화 할 수 있습니다.