我有一个 docker-compose 文件,其中包含以下服务:
我希望 Dind 的子容器能够在与 Dind 相同的 docker-compose 文件中使用来自 RabbitMQ 的消息。
version: '3.8'
services:
dind:
build:
context: docker-compose-command-api
dockerfile: Dockerfile
container_name: docker-compose-command-api
privileged: true
ports:
- "8080:8080"
volumes:
- ./message-consumer-worker:/app/message-consumer-worker:ro
networks:
- default
rabbitmq:
image: rabbitmq:3.12.10-management
container_name: rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
ports:
- "5672:5672"
- "15672:15672"
volumes:
- ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro
- ./rabbitmq/definitions.json:/etc/rabbitmq/definitions.json:ro
healthcheck:
test: [ "CMD", "rabbitmqctl", "status" ]
interval: 5s
timeout: 20s
retries: 5
networks:
- default
networks:
default:
driver: bridge
将在 Dind 内运行的 docker-compose:
version: '3.8'
services:
app:
build:
context: message-consumer-worker
dockerfile: Dockerfile
container_name: message-consumer-worker
根据我的研究,可以使用外部网络。但由于缺乏知识,我没有实施。
我认为你需要在 docker-compose 文件中使用
network_mode: host
。这将使内部容器使用与主机(外部容器)相同的网络。