ZeroMQ无法在上的Docker上使用.bind() – 地址已被使用。 为什么?

尝试在0.0.0.0:5555地址尝试在Docker容器中通过Rancher Cattle运行它时,ZeroMQ套接字遇到了一些问题。

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

zmq.error.ZMQError:地址已被使用。

试图做我的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)) ... 

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

ZeroMQ API定义了3种方法:

将本地地址分配给套接字

当使用带有tcp:// transport的zmq_bind()将一个本地地址分配给一个套接字时,端点将被解释为一个接口,后跟一个冒号和要使用的TCP端口号。

接口可以由以下任何一种指定:
通配符* ,表示所有可用的接口。
– 分配给接口的主IPv4地址 ,以其数字表示。
– 操作系统定义的接口名称

接口名称没有任何标准化, 应该假设是任意的和平台相关的 。 在Win32平台上,不存在短接口名称,因此只有主IPv4地址可以用来指定接口。

所以,至less应该让工作进展。

经过两个小时的debugging,我试图让.bind_to_random_port()并注意到,我在Docker的应用程序启动通过4 Gunicorn工人。 所以在第一个工人开始工作后,另外三个工人不能绑定到同一个港口。 当您有多个线程或多个工作应用程序时,请注意只绑定到一个端口。