我为在hyperledger fabric orderers中设置zookeeper集群而苦苦挣扎。通过docker zookeeper用户论坛[https://forums.docker.com/t/cannot-get-zookeeper-to-work-running-in-docker-using-swarm-mode/27109],它说我必须使用0.0.0.0作为服务器的主机。
我无法理解为什么127.0.0.1或localhost无法正常工作。此外,如果0.0.0.0用作子网掩码,则255.255.255.0或0.0.0.1也不起作用。
那么对于主机上的服务器,docker zookeeper上0.0.0.0的含义是什么。
version: '2'
services:
zk-1:
extends:
file: docker-compose-zkbase.yml # common setting for zookeepers
service: zookeeper
container_name: zk-1
hostname: zk-1
environment:
- ZOO_MY_ID=1
- ZOO_SERVERS=server.1=0.0.0.0:2888:3888 server.2=13.125.46.185:2888:3888 server.3=54.180.152.130:2888:3888
最后0.0.0.0对我有好处,但我仍然不理解docker zookeeper的0.0.0.0的确切含义。
多数民众赞成网络。当你“打开”一个套接字,这意味着你创建了任何类型的tcp / udp服务器,你可以将套接字qzxswpoi到本地PC上的某个接口。
这意味着您要求服务器仅接受来自指定接口的连接。例如,您可以在板上安装多个以太网卡,并且您希望Web服务器仅在特定的一个上可用。
为了实现这一目标,您需要将服务器bind
指向该接口,并指定IP地址。
与此同时,似乎有一些特殊的价值观,它们是:
bind
- 意味着您的服务可以在所有界面上访问。您可以从本地计算机和任何连接到任何以太网适配器的PC进行连接。
0.0.0.0
- 意味着您在本地开设服务。这使您的服务仅适用于本地PC的连接。不接受外部连接。出于安全原因,此选项很有用。通常它用于反向代理体系结构,当不安全(localhost/127.0.0.1
)连接在本地打开并且安全(http
)时 - 在https
绑定0.0.0.0
作为反向代理服务器。
最后0.0.0.0对我有好处,但我仍然不理解docker zookeeper的0.0.0.0的确切含义。
例如,如果它使用localhost网络nginx
而不是zookeeper将无法在端口127.0.0.1
上的容器外访问。
这个2888
非常出色地解释了0.0.0.0和127.0.0.1之间的区别。
127.0.0.1和0.0.0.0之间有什么区别?
- answer是环回地址(也称为localhost)。
127.0.0.1
是一个不可路由的元地址,用于指定无效的,未知的或不适用的目标(没有特定的地址占位符)。在路由条目的上下文中,它通常表示默认路由。
在服务器的上下文中,0.0.0.0表示“>本地计算机上的所有IPv4地址”。如果主机有两个IP地址,192.168.1.1和> 10.1.2.1,>并且主机上运行的服务器侦听0.0.0.0,那么这两个IP都将>可访问>。