docker守护程序在Ubuntu计算机上运行。我正在尝试启动一群动物园管理员。动物园管理员节点本身可以互相交谈。但是,从主机看来,我似乎无法访问已发布的端口。
如果我使用-
启动容器 docker run \
-p 2181:2181 \
--env ZOO_MY_ID=1 \
--env ZOO_SERVERS="server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
zookeeper
它就像一种魅力。在我的主机上,我可以说echo conf | nc localhost 2181
,而动物园管理员则可以说些什么。
如果我愿意,
docker service create \
-p 2181:2181 \
--env ZOO_MY_ID=1 \
--env ZOO_SERVERS="server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \
zookeeper
并运行相同的命令echo conf | nc localhost 2181
,
它只是卡住了。我什至没有在终端上收到新提示。
这与Zookeeper官方Docker Hub页面上的Docker Playground预期的一样。所以我希望它也应该适合我。
但是...如果我docker exec -it $container sh
然后在其中尝试命令,它将再次起作用。
即使服务的主机也不能访问已发布的端口吗?
在使用覆盖网络时是否缺少一些技巧?
答案 0 :(得分:0)
尝试改用docket service create --publish 2181:2181
。
我相信支持该服务的容器不会直接暴露在外,而必须通过Swarm网络进行。
否则,请检查您的服务以检查发布了哪个端口:docker service inspect <service_name>