【发布时间】:2021-03-20 15:21:18
【问题描述】:
我有两个独立的服务,在不同的目录中,为同一个 docker 网络配置。
Service PUB 是一个 RabbitMQ 发布者。它的 docker-compose 文件启动服务 PUB 和 RabbitMQ。
Service WRK 是一个 RabbitMQ 工作者。它的 docker-compose 文件启动服务 WRK 和 RabbitMQ。
docker-compose up -d PUB 将启动 PUB 和 RabbitMQ,但随后运行 docker-compose up -d WKR 将失败,因为已经分配了 RabbitMQ 端口。 Bind for 0.0.0.0:15672 failed: port is already allocated
但是,如果我还没有启动 PUB,docker-compose up -d WRK 会同时启动 WRK 和 RabbitMQ。
如何配置 docker-compose.yml 文件,以便如果 RabbitMQ 已经在运行,它不会尝试启动 RabbitMQ 而只是连接到现有实例?
服务 PUB 的 docker-compose.yml:
services:
PUB:
image: pub-image
networks:
- myNet
environment:
RMQ_URI: amqp://guest@rabbitmq:5672//
ports:
- 127.0.0.1:5000:5000/tcp
links:
- rabbitmq:rabbitmq
depends_on:
- rabbitmq
rabbitmq:
image: rabbitmq:3.8.14-management
networks:
- myNet
ports:
- 5672:5672
- 15672:15672
networks:
myNet:
name: myNet
driver: bridge
用于服务 WRK 的 docker-compose.yml:
services:
WRK:
image: wrk-image
networks:
- myNet
environment:
RMQ_URI: amqp://guest@rabbitmq:5672//
links:
- rabbitmq:rabbitmq
depends_on:
- rabbitmq
rabbitmq:
image: rabbitmq:3.8.14-management
networks:
- myNet
ports:
- 5672:5672
- 15672:15672
networks:
myNet:
name: myNet
driver: bridge
【问题讨论】:
-
您已经声明了两次
rabbitmq,因此您要求 Compose 创建pub_rabbitmq_1和wrk_rabbitmq_1,作为单独的代理,使用相同的主机端口。参见例如Communication between multiple docker-compose projects 让一个项目与另一个项目的 RabbitMQ 对话。 -
(
links:在现代 Docker 中是不必要的;可以使用 Compose 提供的default网络,并删除所有networks:块。) -
@DavidMaze 当且仅当一个rabbitmq尚未运行时,我才想启动一个rabbitmq,但来自AdamP的解决方案让我重新考虑我的用例,我可以在其中使用相同的docker-compose文件每个单独的项目目录,因为它们确实保持关系。现在我可以从任一目录本地运行/测试。
标签: docker docker-compose rabbitmq