尝试在.bind()
地址上尝试 0.0.0.0:5555
时尝试通过Rancher Cattle在Docker容器中运行它时,ZeroMQ套接字有点问题。
每当我尝试运行它时,我都会遇到同样的错误:
zmq.error.ZMQError:地址已在使用中。
试图在我的Dockerfile中执行EXPOSE 5555
和EXPOSE 5555/tcp
,但它对我没有帮助。
以下是我的代码的一部分:
...
self.context = zmq.Context()
self.socket = self.context.socket(zmq.PUB)
self.socket.bind('tcp://%s:%d' % ('0.0.0.0', 5555))
...
也许有人有同样的问题。怎么解决?
答案 0 :(得分:3)
为套接字分配本地地址
使用带有zmq_bind()
传输的tcp://
为套接字分配本地地址时,端点应被解释为接口后跟冒号和要使用的TCP端口号。
可以通过以下任一方式指定接口:
- 通配符* ,表示所有可用的接口 - 以数字形式分配给接口的主IPv4地址 - 操作系统定义的接口名称
接口名称不以任何方式标准化,应假定为任意且依赖于平台。在Win32平台上,不存在短接口名称,因此只能使用主IPv4地址来指定接口。
所以,至少有一个应该让工作进展。
答案 1 :(得分:3)
经过两个小时的调试后,我尝试 .bind_to_random_port()
并注意到我的Docker应用程序是通过4个Gunicorn
工作人员启动的。因此,在第一个工作人员启动后,另外三个工作人员无法绑定到同一个端口。当您有多个线程或多个工作程序应用程序时,请注意仅绑定到一个端口。