Got a bit problem with ZeroMQ socket on trying to .bind()
on 0.0.0.0:5555
address, when tried to run it in Docker container via a Rancher Cattle.
Every time I try to run it, I'm getting the same error:
zmq.error.ZMQError: Address already in use.
Tried to do EXPOSE 5555
and EXPOSE 5555/tcp
in my Dockerfile, but it did not help me.
Here is a part of my code:
...
self.context = zmq.Context()
self.socket = self.context.socket(zmq.PUB)
self.socket.bind('tcp://%s:%d' % ('0.0.0.0', 5555))
...
Maybe somebody had the same problem. How to solve it?
The Error “address already in use” occurred because some process was already running on the same port. So we can resolve the issue just by killing the process. To stop the process, we need the process ID (PID), which we can fetch using the lsof command.
Contexts help manage any sockets that are created as well as the number of threads ZeroMQ uses behind the scenes. Create one when you initialize a process and destroy it as the process is terminated. Contexts can be shared between threads and, in fact, are the only ZeroMQ objects that can safely do this.
Assigning a local address to a socket
When assigning a local address to a socket usingzmq_bind()
with thetcp://
transport, the endpoint shall be interpreted as an interface followed by a colon and the TCP port number to use.
An interface may be specified by either of the following:
- The wild-card *, meaning all available interfaces.
- The primary IPv4 address assigned to the interface, in its numeric representation.
- The interface name as defined by the operating system.
Interface names are not standardised in any way and should be assumed to be arbitrary and platform dependent. On Win32 platforms no short interface names exist, thus only the primary IPv4 address may be used to specify an interface.
So, at least one ought make the job progress.
After two hours of debugging i tried to make .bind_to_random_port()
and noticed, that my app in Docker starts via 4 Gunicorn
workers. So after first worker started, three another workers can not bind to the same port. Be aware of binding to only one port while you have multiple threaded or multiple workers application.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With