从不同的docker-compose.yml部署容器



当前我有 RABBITMQ 消息经纪和多个需要容器化的芹菜工人。我的问题是,如何使用不同的docker-compose.yml启动容器?我的目标是一劳永逸地启动 RABBITMQ ,再也不会触摸它。

目前,我有一个 Rabbitmq docker-compose.yml

version: '2'
services:
    rabbit:
        hostname: rabbit
        image: rabbitmq:latest
        environment:
            - RABBITMQ_DEFAULT_USER=admin
            - RABBITMQ_DEFAULT_PASS=mypass
        ports:
            - "5672:5672"
        expose:
            - "5672"

和另一个docker-compose.yml用于芹菜工人

version: '2'
services:
    worker:
        build:
            context: .
            dockerfile: dockerfile
        volumes:
            - .:/app
        environment:
            - CELERY_BROKER_URL=amqp://admin:mypass@rabbit:5672
        links:
            - rabbit

但是,当我为芹菜工人做docker-compose up时,我会继续遇到以下错误:

ERROR/MainProcess] consumer: Cannot connect to 
amqp://admin:**@rabbit:5672//: failed to resolve broker hostname.

如果我的代码有任何问题,谁能看看吗?谢谢。

您的第二个docker-compose.yml文件中的域名 rabbit无法解决,因为该名称在该docker-compose.yml文件中没有服务。

如注释中所述,一种解决方案是将rabbit服务和worker服务同时将其放在同一docker-compose.yml文件中。在这样的设置中,所有为这些服务启动的容器都将加入相同的Docker网络,并且这些服务名称可以解决到其容器的IP Adresses。

由于在您的情况下使用单个Docker-compose.yml文件并不方便,因此您必须找到其他方法,使容器源自不同的Docker-compose.yml文件。

要这样做,您需要为此目的创建一个专用的Docker网络:

docker network create rabbitNetwork

然后,在每个Docker-compose.yml文件中,您需要在服务定义中参考此网络:

version: '2'
services:
    rabbit:
        hostname: rabbit
        image: rabbitmq:latest
        environment:
            - RABBITMQ_DEFAULT_USER=admin
            - RABBITMQ_DEFAULT_PASS=mypass
        # ports:
        #    - "5672:5672"  # there is no need to publish ports on the docker host anymore
        expose:
            - "5672"
        networks:
            - rabbitNet
networks:
  rabbitNet:
    external:
      name: rabbitNetwork
version: '2'
services:
    worker:
        build:
            context: .
            dockerfile: dockerfile
        volumes:
            - .:/app
        environment:
            - CELERY_BROKER_URL=amqp://admin:mypass@rabbit:5672
        networks:
            - rabbitNet
networks:
  rabbitNet:
    external:
      name: rabbitNetwork

您可以将任何文件用作服务定义。 docker-compose.yml是默认文件名,但可以使用-f参数传递任何其他名称。

docker-compose -f rabbit-compose.yml COMMAND

相关内容

  • 没有找到相关文章

最新更新