如何使用与父容器(Docker中的Docker)相同的网络?

llew8vvj  于 2024-01-06  发布在  Docker
关注(0)|答案(2)|浏览(373)

我有一个docker-compose文件,其中包括以下服务:

  • Dind(在这个容器中有其他容器负责消费RabbitMQ队列)
  • RabbitMQ

我希望Dind的子容器在与Dind相同的docker-compose文件中使用来自RabbitMQ的消息。

  1. version: '3.8'
  2. services:
  3. dind:
  4. build:
  5. context: docker-compose-command-api
  6. dockerfile: Dockerfile
  7. container_name: docker-compose-command-api
  8. privileged: true
  9. ports:
  10. - "8080:8080"
  11. volumes:
  12. - ./message-consumer-worker:/app/message-consumer-worker:ro
  13. networks:
  14. - default
  15. rabbitmq:
  16. image: rabbitmq:3.12.10-management
  17. container_name: rabbitmq
  18. environment:
  19. - RABBITMQ_DEFAULT_USER=guest
  20. - RABBITMQ_DEFAULT_PASS=guest
  21. ports:
  22. - "5672:5672"
  23. - "15672:15672"
  24. volumes:
  25. - ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro
  26. - ./rabbitmq/definitions.json:/etc/rabbitmq/definitions.json:ro
  27. healthcheck:
  28. test: [ "CMD", "rabbitmqctl", "status" ]
  29. interval: 5s
  30. timeout: 20s
  31. retries: 5
  32. networks:
  33. - default
  34. networks:
  35. default:
  36. driver: bridge

字符串
将在Dind中运行的docker-compose:

  1. version: '3.8'
  2. services:
  3. app:
  4. build:
  5. context: message-consumer-worker
  6. dockerfile: Dockerfile
  7. container_name: message-consumer-worker


从我的研究来看,使用外部网络是可能的。但由于缺乏知识,我没有实现它。
我在Docker(DinD)中运行Docker,因为在Docker中,我有一个负责扩展消费者的API。例如,API接收到一个扩展10个消费者的请求,然后它使用“docker compose up”命令创建容器。这就是为什么我需要在Docker中运行Docker以使我的消费者可扩展。你有什么其他建议可以帮助我吗?

gzszwxb4

gzszwxb41#

我认为你需要在docker-compose文件中使用network_mode: host。这将使内部容器使用与主机(外部容器)相同的网络。

bqjvbblv

bqjvbblv2#

Docker网络特定于Docker守护进程的示例。如果您正在运行Docker中的Docker设置,则嵌套的Docker守护进程具有自己的映像,容器,卷和网络;您不能在两个Dockers之间共享任何这些资源。Compose external: true网络允许一个Compose文件附加到在此特定Compose文件之外创建的网络,但在其他Docker守护进程中却没有。Docker Hub docker image显然没有提供任何类似Docker Desktop上可用的host.docker.internal主机名的东西来调用守护进程的网络环境。
这里最简单的答案是在同一个Compose文件中运行RabbitMQ broker和worker。这里不需要嵌套的Docker守护进程,我可能会完全删除DinD容器。

  1. version: '3.8'
  2. services:
  3. rabbitmq: { ... }
  4. app:
  5. build: message-consumer-worker

字符串

相关问题