我的场景:我希望我的基于Docker的服务知道什么IP从networking调用它们(我的应用程序的要求)。
我在Docker 1.12.2上运行一个云端VPS,debian jessie。
我在详细模式下使用nc打开端口8080 。
docker run --rm -p "8080:8080" centos bash -c "yum install -y nc && nc -vv -kl -p 8080"
说,VPS有域example.com ,并从我的另一台机器,让我们说有IP dead:::::beef我打电话
nc example.com 8080
服务器说:
Ncat: Version 6.40 ( http://nmap.org/ncat ) Ncat: Listening on :::8080 Ncat: Listening on 0.0.0.0:8080 Ncat: Connection from 172.17.0.1. Ncat: Connection from 172.17.0.1:49799.
172.17.0.1位于服务器的本地networking上,当然与我的客户无关。 事实上:
docker0 Link encap:Ethernet HWaddr .... inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
如果我以主机联网模式启动容器
docker run --rm --net=host -p "8080:8080" centos bash -c "yum install -y nc && nc -vv -kl -p 8080"
并再次呼叫我的服务器
nc example.com 8080
我得到了预期的结果:
Ncat: Connection from dead:::::beef. Ncat: Connection from dead:::::beef:55650.
我的问题是:
nc在容器中运行,因此只能看到来自docker守护进程IP的调用。