【问题标题】:Unable to connect python container to activeMQ Artemis container无法将 python 容器连接到 activeMQ Artemis 容器
【发布时间】:2023-03-04 18:35:01
【问题描述】:

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

我按照 this youtube video 的指示建立了我的 Artemis 形象,一切都很好。我还关注了this tutorial,开始通过 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

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

【问题讨论】:

  • Could not connect to host localhost - localhost 容器内部不会解析到您的 IP(除非您正在运行连接到 host 网络的容器)。如果您在同一个 docker network 中运行服务,那么您应该能够通过容器名称(或服务名称,如果您使用 docker-compose 编排容器)来解析容器。

标签: python docker activemq-artemis artemiscloud


【解决方案1】:

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 的方法。

【讨论】:

    【解决方案2】:

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

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

    hosts = [('172.19.0.2', 61613)]
    

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 2021-05-16
      • 2022-01-22
      • 2020-02-29
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2021-02-09
      • 2017-09-13
      相关资源
      最近更新 更多