Unable to connect python container to activeMQ Artemis container

800 views Asked by At

My end goal is to have several Python containers running different processes communicate to each other via an ActiveMQ Artemis container. I'm new to all of this, so as a start, I'm just trying to get a proof of concept running.

I followed instructions from this youtube video to build my image of Artemis and everything jives nicely there. I also followed this tutorial to get started sending messages via stomp to Artemis. When I run this script locally (from PyCharm) while my Artemis container is up and running, I can see in the web console that there is a new generated queue from the python script. However, when I containerize the same Python script, I get an error

Could not connect to host localhost, port 61613
Could not connect to host localhost, port 61613
Could not connect to host localhost, port 61613
Traceback (most recent call last):
  File "/code/./main.py", line 5, in <module>
    import sendAMessage
  File "/code/sendAMessage.py", line 30, in <module>
    conn.connect('admin', 'admin', wait=True)
  File "/usr/local/lib/python3.9/site-packages/stomp/connect.py", line 164, in connect
    self.transport.start()
  File "/usr/local/lib/python3.9/site-packages/stomp/transport.py", line 109, in start
    self.attempt_connection()
  File "/usr/local/lib/python3.9/site-packages/stomp/transport.py", line 819, in attempt_connection
    raise exception.ConnectFailedException()

I tried setting up a network in docker and putting both containers onto it. I'm running my python container using

docker run --rm --net my-network -p 5000:5000 myimage

I have a feeling I'm incorrectly exposing a port, or something silly like that, but I'm just not quite familiar enough with containers to know where to start looking.

2

There are 2 answers

0
user11460549 On BEST ANSWER

masseyb's answer helped point me the right way.

The way I fixed it was getting the IP address of my ActiveMQ container (docker network inspect) and putting that in the .py script instead of 'localhost'.

hosts = [('172.19.0.2', 61613)]
0
Domenico Francesco Bruscino On

The python script is working from your local host because the -p 5000:5000 parameter exposes the port 5000 of the ActiveMQ Artemis container on the localhost. To reach the ActiveMQ Artemis container from another container in the same docker network (--net my-network) the python script should use the ActiveMQ Artemis container name (--name my-artemis), i.e.

docker run --rm --name my-artemis --net my-network -p 5000:5000 myimage

Docker makes deploying microservice applications very easy but it has some limitations for a production environment. I would take a look to the open source ArtemisCloud.io project, it is a collection of container images that provide a way to deploy the Apache ActiveMQ Artemis Broker on Kubernetes.