Search code examples
pythondockeractivemq-artemisartemiscloud

Unable to connect python container to activeMQ Artemis container


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.


Solution

  • 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)]