问题 如何在具有不同名称的同一个docker守护程序上多次运行相同的docker-compose.yml?


我的情况。试图在同一个盒子上多次运行一个docker-compose结构。这是我的 泊坞窗,compose.yml

version: '3'
services:
  code:
    image: organization:java-maven
    links:
      - mysql:mysql
    volumes:
      - "${PWD}:/home/ubuntu/src"
  mysql:
    image: organization:mysql

运行这两次 docker-compose run code mvn clean test 创建了两个容器 code 和一个容器 mysql

现在,我想要一个 code 与一个人联系在一起 mysql,和 另一个  code 链接到 另一个  mysql

我该如何做到这一点?这应该在jenkins奴隶上运行,maven执行不能共享mysql。

我很难尝试使用“-e KEY = VALUE”选项 docker-compose run 和...一起 container_name在docker撰写文件中。

不知道该如何处理,请帮助,谢谢。


9428
2018-01-24 15:08


起源

你为什么不指定第二个 code 容器显式并将其与适当的链接 mysql  容器,而不是“两次”运行它? - antonbormotov
因为当jenkins触发分支中的更改时,它会启动ec2实例(构建slave),然后执行jenkins管道。该管道使用docker compose setup运行maven测试。管道中的单个测试执行与其他正在运行的管道无关,并且jenkins从站配置为运行多个执行程序。 - Wrench
对于具有代码容器的所有并发管道,MySQL容器应该是相同的吗? - antonbormotov
不,所有管道容器都应该有自己的MySQL容器。 - Wrench


答案:


因此,我过分关注使用指令手动更改容器名称。解决方案更容易。

docker-compose -p anything run code mvn clean test

docker-compose -p anything_else run code mvn clean test

所以,这是项目名称解决方案。 Docker compose将使用该选项给出的值 -p 作为创建容器名称时的前缀。这意味着没有碰撞。

非常便利!

如需更多阅读: 有关配置文件选项


10
2018-01-24 17:59



+1你的问题和答案。另一个例子是逐步将新构建引入实时。多个容器之间的负载平衡,其中80%运行当前构建,20%运行新构建,然后60%/ 40%然后50%/ 50%然后60/40%等等,以查看新构建如何扩展因为它逐渐被引入。当然,在此之前,将进行广泛的测试:开发,单位,qa,uat和缩放。但是,在推出之前,人们永远不会真正了解100%,因此您的答案可以应用于实时推出。 - therobyouknow