问题:ZeroMQ 在 [0.0.0.0:5555] 上的 Docker 上无法 .bind() - 地址已在使用中。为什么?

当尝试通过 Rancher Cattle 在 Docker 容器中运行它时,ZeroMQ 套接字在尝试在0.0.0.0:5555地址上执行 .bind() 时遇到了一点问题。

每次我尝试运行它时,我都会遇到同样的错误:

zmq.error.ZMQError:地址已在使用中。

试图在我的 Dockerfile 中做EXPOSE 5555EXPOSE 5555/tcp,但它没有帮助我。

这是我的代码的一部分:

...
self.context = zmq.Context()
self.socket = self.context.socket(zmq.PUB)
self.socket.bind('tcp://%s:%d' % ('0.0.0.0', 5555))
...

也许有人有同样的问题。如何解决?

解答

经过两个小时的调试,我尝试制作 .bind_to_random_port() 并注意到,我在 Docker 中的应用程序是通过 4 个Gunicorn工作人员启动的。所以在第一个工人启动后,另外三个工人不能绑定到同一个端口。当您有多个线程或多个工作人员应用程序时,请注意仅绑定到一个端口。

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐