【问题标题】:Can't access published port on a service on my host machine无法访问我主机上服务上的已发布端口
【发布时间】: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


【解决方案1】:

尝试改用docket service create --publish 2181:2181

我相信支持服务的容器不会直接暴露,必须通过 Swarm 网络。

否则,请检查您的服务以检查发布的端口:docker service inspect <service_name>

来源:documentation

【讨论】:

  • inspect 显示 2181 端口已发布。然而,这是同样的问题。使用“--publish”时问题仍然存在。
猜你喜欢
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
相关资源
最近更新 更多