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
Answers
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'.
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 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.