【问题标题】:RabbitMQ cluster by docker-compose on different hosts and different projectsdocker-compose 在不同主机和不同项目上的 RabbitMQ 集群
【发布时间】:2016-10-05 22:17:48
【问题描述】:

我有 3 个项目,部署在不同的主机上。每个项目都有自己的 RabbitMQ 容器。但是我需要用这 3 个主机创建集群,使用相同的虚拟主机,但不同的用户/登录对。

我尝试过 Swarm 和覆盖网络,但 swarm 旨在运行单独的容器,并且使用 compose 无法正常工作。另外,我尝试了 docker-compose bundle,但这没有按预期工作:(

我认为它会像这样工作

1) 在管理器节点上我创建覆盖网络

2) 在每个 compose 文件中,我使用覆盖网络扩展 rabbitmq 容器的网络配置。

3) 它们按预期工作,我没有发布到 Internet rabbitmq 端口。


任何想法,我该怎么做?

【问题讨论】:

    标签: docker rabbitmq docker-compose docker-swarm docker-networking


    【解决方案1】:

    您的方法是正确的,但目前Docker Compose doesn't work with Swarm Mode。 Compose 只运行docker 命令,因此您可以编写您想要的脚本。对于每个项目,您都会有这样的脚本:

    docker network create -d overlay app1-net
    docker service create --network app1-net --name rabbit-app1 rabbitmq:3
    docker service create --network app1-net --name app1 your-app-1-image
    ...
    

    当您在管理器上运行所有三个脚本时,您将拥有三个网络,每个网络将拥有自己的 RabbitMQ 服务(默认只有 1 个容器,使用 --replicas 运行多个)。在网络内,其他服务可以通过 DNS 名称rabbit-appX 访问消息队列。您不需要发布任何端口,因此在 Docker 网络之外无法访问 Rabbit。

    【讨论】:

    • 所以你的意思是,我需要运行每个容器,在我的撰写文件中定义为docker service create 命令的服务?好的...但是卷呢?例如,对于其中一个项目使用的 MariaDB 或 Redis?
    • 您可以使用docker service create 中的--mount 选项来做到这一点。请注意,如果主机出现故障,您的容器会四处移动,因此您需要一个共享卷驱动程序。
    • 感谢有用的链接。我认为,这是我的问题的解决方案。不是很方便......但它应该工作。 docker-compose bundledocker deploy 怎么样(我已经安装了 Docker 1.12.2-rc2)?效果一样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2021-08-05
    • 2021-01-07
    相关资源
    最近更新 更多