Docker中的Zookeeper

我在我的Windows 7机器上的Docker容器中运行zookeeper。 我使用docker-compose并在里面定义了端口:['2181:2181']映射。 dockerterminal显示zookeeper实例正在运行:b3169443e7ee confluentinc / cp-zookeeper:3.3.0 2888 / tcp,0.0.0.0:2181->2181/tcp,3888 / tcp zookeeper

但是,当我在Windowsterminal执行netstat -an我没有看到打开2181端口。 我也不能使用本地主机端口2181上的putty telnet连接到zookeeper。可能是什么问题? 据我了解,zookeeper端口不暴露给主机。 但是他们应该是因为我包括docker-compose .yaml文件中的端口映射。

这是windows上localhost一个已知问题。 您需要使用容器IP地址。 你可以通过运行命令find它

 docker inspect --format '{{ .NetworkSettings.Networks.nat.IPAddress }}' <container> 

欲了解更多信息,请查看: https : //blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/

好的,最后我找出了原因。 由于在Windows 7上,您必须在运行Linux系统的虚拟框中运行Docker容器,Docker容器将虚拟框系统视为其主机,而不是原始Windows 7计算机。 因此,端口映射客户到主机将Docker容器的端口2181映射到虚拟框中的Linux系统的2181端口,而不映射到“真实”Windows 7主机的2181端口。 因此,为了连接到zookeeper,我必须使用docker-machine ls检索虚拟机器的IP,然后连接到该IP上的端口2181。