我有两个独立的服务,位于不同的目录中,为同一个 docker 网络配置。
Service PUB 是一个 RabbitMQ 发布者。它的 docker-compose 文件启动服务 PUB 和 RabbitMQ。
Service WRK 是一个 RabbitMQ worker。它的 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
答案 0 :(得分:2)
因为您没有在这些撰写文件中使用卷,因此可以合并它们:
services:
WRK:
image: wrk-image
networks:
- myNet
environment:
RMQ_URI: amqp://guest@rabbitmq:5672//
links:
- rabbitmq:rabbitmq
depends_on:
- rabbitmq
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