0

我的最终目标是让运行不同进程的多个 Python 容器通过 ActiveMQ Artemis 容器相互通信。我对这一切都很陌生,所以作为开始,我只是想运行一个概念验证。

我按照这个 youtube 视频中的说明建立了我的阿尔忒弥斯形象,一切都很好。我还按照本教程开始通过 stomp 向 Artemis 发送消息。当我在 Artemis 容器启动并运行时在本地(从 PyCharm)运行此脚本时,我可以在 Web 控制台中看到从 python 脚本生成的新队列。但是,当我将相同的 Python 脚本容器化时,出现错误

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()

我尝试在 docker 中建立一个网络并将两个容器都放在上面。我正在运行我的python容器

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

我有一种感觉,我错误地暴露了一个端口,或者类似的愚蠢的东西,但我对容器不太熟悉,不知道从哪里开始寻找。

4

2 回答 2

0

python 脚本在您的本地主机上运行,​​因为该-p 5000:5000参数在本地主机上公开了 ActiveMQ Artemis 容器的端口 5000。要从同一个 docker 网络中的另一个容器(--net my-network)访问 ActiveMQ Artemis 容器,python 脚本应使用 ActiveMQ Artemis 容器名称(--name my-artemis),即

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

Docker 使部署微服务应用程序变得非常容易,但它对生产环境有一些限制。我会看一下开源ArtemisCloud.io项目,它是一组容器镜像,提供了在 Kubernetes 上部署 Apache ActiveMQ Artemis Broker 的方法。

于 2021-12-07T10:07:01.123 回答
0

masseyb 的回答帮助我指出了正确的方向。

我修复它的方法是获取我的 ActiveMQ 容器(docker network inspect)的 IP 地址并将其放入 .py 脚本而不是“localhost”。

hosts = [('172.19.0.2', 61613)]
于 2021-12-08T23:33:12.133 回答