[英]Docker app not available with host IP when using automatic port mapping
[英]When to perform host-ip based port mapping like “-p host-ip:port:port”
Docker提供了一种在容器和主机之间映射端口的方法。
根据官方文档,在端口映射时也可以提及host-ip。
-p 192.168.1.100:8080:80
将容器中的TCP端口80映射到Docker主机上的端口8080,以连接到主机IP 192.168.1.100
。
我尝试了该选项,以了解使用/不使用主机IP的区别。
-p 80:80
$ docker run -itd -p 80:80 nginx:alpine
$ curl localhost:80
$ curl 127.0.0.1:80
$ curl 0.0.0.0:80
$ curl 192.168.0.13:80
$ ps -ef | grep docker-proxy
16723 root 0:00 /usr/local/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.1 -container-port 80
$
所有curl命令都返回输出。
-p 192.168.0.13:80:80
这样的host-ip $ docker run -itd -p 192.168.0.13:80:80 nginx:alpine
$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused
$ curl 127.0.0.1:80
curl: (7) Failed to connect to 127.0.0.1 port 80: Connection refused
$ curl 0.0.0.0:80
curl: (7) Failed to connect to 0.0.0.0 port 80: Connection refused
$ curl 192.168.0.13:80 # return output
$ ps -ef | grep docker-proxy
4914 root 0:00 /usr/local/bin/docker-proxy -proto tcp -host-ip 192.168.0.13 -host-port 80 -container-ip 172.17.0.2 -container-port 80
$
除192.168.0.13:80
以外,所有curl
命令均失败。
除了我在这里提到的以外,是否还有其他区别。
想知道何时使用基于主机IP的端口映射。 有没有用例?
一个Docker主机可能具有多个NIC。 在数据中心中,这可能过于隔离流量,例如管理,存储和应用程序/公共。 在您的笔记本电脑上,这可能用于无线和有线接口。 还有虚拟NIC,用于回送(127.0.0.1)和VPN隧道。
当您在port publish命令中未指定IP时,默认情况下docker将绑定到主机上的所有接口。 在IPv4中,这通常表示为0.0.0.0,这意味着可以在任何接口上侦听(这就是为什么我不连接到该地址,因为没有连接到任何IP的原因)。 使用指定的IP地址,您可以手动指定要使用的接口。 您为什么要指定这个? 我能想到的几个原因:
尽管有很多可能的原因,除了监听环回以确保安全性之外,这些用例很少见,大多数用户都离开了docker监听所有接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.