繁体   English   中英

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

[英]Deploy containers from different docker-compose.yml

目前我有一个rabbitmq消息代理和多个需要容器化的celery 工人 我的问题是,如何使用不同docker-compose.yml启动容器? 我的目标是一劳永逸地启动rabbitmq,再也不碰它。

目前我有一个用于rabbitmq 的 docker docker-compose.yml 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

但是,当我为celery workers执行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 地址。

由于在您的情况下使用单个 docker-compose.yml 文件并不方便,因此您必须找到另一种方法让来自不同 docker-compose.yml 文件的容器加入同一个 docker 网络。

为此,您需要为此创建一个专用的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM