【发布时间】:2020-01-15 21:23:24
【问题描述】:
我正在构建一个非常简单的项目。两个python脚本; producer.py 和 consumer.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
和receive完全一样:
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
【问题讨论】:
-
当您在本地机器上运行时,您可能会连接到本地主机上的 RMQ,例如
amqp://admin:admin@localhost:5672,在 docker 中运行时(并通过您的 docker-compose 脚本运行),生产者、消费者和 RMQ 都在不同的容器中,因此您将无法使用 localhost。如果你执行到生产者或消费者;你能ping通rabbitmq吗?仅供参考,同一个 docker 网络中的 docker 容器可以使用容器名称进行 DNS 解析,例如生产者和消费者中的连接字符串为amqp://admin:admin@rabbitmq:5672。
标签: docker docker-compose rabbitmq