【发布时间】:2019-04-12 21:13:51
【问题描述】:
docker 守护进程在 Ubuntu 机器上运行。我正在尝试在一群中启动一个动物园管理员合奏。 zookeeper 节点本身可以相互通信。但是,从主机上,我似乎无法访问已发布的端口。
如果我用 - 启动容器
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,zookeeper 会回复。
如果我这样做了,
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 然后尝试那里的命令,它会再次起作用。
发布的端口不应该被主机访问以获取服务吗?
在使用覆盖网络时我是否缺少一些技巧?
【问题讨论】:
-
当你执行 'docker service ps --no-trunc zookeeper' 时你看到了什么?
-
如果您正在寻找的话,当我运行该命令时,端口下没有列出任何内容。
-
但是,如果我在端口下执行“docker service ls”,它会显示“*:2181->2181/tcp”
-
实际上我期待一些失败的容器处于“当前状态”。您在服务日志中看到任何感兴趣的内容吗? (docker service logs zookeeper) 你是否在同一台机器下同时运行你的'run'和'service create'命令?另外我想您检查了 /etc/hosts 是否存在本地主机?
-
localhost 存在于 hosts 文件中。日志甚至不注册来自主机的请求。
nc命令卡住了。但是,如果我将docker exec放入容器并运行命令,则日志会反映nc请求。是的。 run 和 service create 命令都在同一个节点上测试过。
标签: docker apache-zookeeper docker-swarm docker-networking