如何通过 rabbitmq 传达两个自己的 Docker 容器



我正在构建一个非常简单的项目。两个 python 脚本;producer.pyconsumer.py.生产者发送随机数,消费者打印它。它无需 docker 即可工作。

我为消费者和生产者构建了两个 docker 镜像,并希望通过 docker-compose "传达"它,当我运行 docker-compose 文件时,我看到这个:

emit_log_1  | Traceback (most recent call last):
emit_log_1  |   File "emit_log.py", line 7, in <module>
emit_log_1  |     connection = pika.BlockingConnection(
emit_log_1  |   File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 359, in __init__
emit_log_1  |     self._impl = self._create_connection(parameters, _impl_class)
emit_log_1  |   File "/usr/local/lib/python3.8/site-packages/pika/adapters/blocking_connection.py", line 450, in _create_connection
emit_log_1  |     raise self._reap_last_connection_workflow_error(error)
emit_log_1  | pika.exceptions.AMQPConnectionError
1_emit_log_1 exited with code 1

接收也完全一样:

Docker-compose.yml:

version: '3'
services:
rabbitmq:
image: rabbitmq:3-management
ports:
- "5672:5672"
- "15672:15672"

emit_log:
build:
context: .
dockerfile: Dockerfile.emit_log
ports:
- "8081:8081"
- "8001:8001"
links:
- rabbitmq

receive:
build:
context: .
dockerfile: Dockerfile.receive
ports:
- "8082:8082"
- "8002:8002"
links:
- rabbitmq

我怀疑您可能正在尝试从发出服务中连接到"localhost",这可能指向容器本地主机本身。默认情况下,Compose 会将容器联网在一起。 如果连接字符串以前位于本地主机上,则需要更新它们以指向所需的容器。

例如,如果您之前从生产者或使用者连接到localhost:5672,并且它们在您的 docker 组合中与您的 rabbitmq 实例联网,则需要使用rabbitmq:5672进行连接

请参阅有关撰写中的网络的详细信息: https://docs.docker.com/compose/networking/

相关内容

最新更新