我注意到每个发布的端口都有 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
Run Code Online (Sandbox Code Playgroud)
以及 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
Run Code Online (Sandbox Code Playgroud)
Tar*_*mán 21
显然有一些边缘情况没有更好的解决方法(目前):
https://github.com/docker/docker/issues/8356
更新:从 1.7.0 (2015-06-16) 开始,可以使用守护进程的 --userland-proxy=false 标志禁用用户空间代理以支持发夹式 NAT。
| 归档时间: |
|
| 查看次数: |
17061 次 |
| 最近记录: |