如果服务已经在运行,我如何指示 docker-compose 不启动它?

时间:2021-03-20 15:21:18

标签: docker docker-compose rabbitmq

我有两个独立的服务,位于不同的目录中,为同一个 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

1 个答案:

答案 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
相关问题