【问题标题】:How do I run the same docker-compose.yml several times on same docker daemon with different names?如何在具有不同名称的同一个 docker 守护程序上多次运行相同的 docker-compose.yml?
【发布时间】:2017-06-09 10:51:16
【问题描述】:

我的情况。尝试在同一个盒子上多次运行 docker-compose 结构。这是我的 docker-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 slave上运行,maven执行不能共享mysql。

我在 docker compose 文件中尝试使用 docker-compose run 和 container_name 的“-e KEY=VALUE”选项失败了。

不知道怎么解决,请帮忙,谢谢。

【问题讨论】:

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

标签: docker docker-compose


【解决方案1】:

所以,我过于关注使用指令手动更改容器名称。解决方案要容易得多。

docker-compose -p anything run code mvn clean test

docker-compose -p anything_else run code mvn clean test

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

非常方便!

更多阅读:documentation around project-name option

【讨论】:

  • +1 你的问题和答案。另一个例子是逐步将新版本引入现场。多个容器之间的负载平衡,其中 80% 运行当前构建,20% 运行新构建,然后 60% / 40% 然后 50% / 50% 然后 60 / 40% 等等,看看新构建如何扩展因为它是逐渐引入的。当然,在此之前,会进行广泛的测试:dev、unit、qa、uat 和 scaling。但在推出之前,人们永远无法真正了解 100%,因此您的答案可以应用于实时推出。
  • 这确实解决了问题,即使不同的 docker-compose 文件引用相同的图像(在这种情况下重新创建容器)。谢谢你拯救了我的一天!
  • 看起来不错,但在这种情况下如何解决端口映射问题?假设一项服务必须与主机端口映射。因此,每个项目多次运行此操作,您需要在 docker-compose 调用期间以某种方式指定端口映射(因为每个新项目/副本都需要映射不同的主机端口)?
  • @Andrius 你能解决这个问题吗?我同意这在理论上看起来不错,但不确定端口和其他服务会如何像你提到的那样映射。
  • @theprogrammer 您可以为要启动的每个环境创建一个覆盖 yml 文件,在其中您只覆盖端口映射。这当然可以在 Jenkins 作业中调用的一些 shell 脚本中编写脚本。
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2015-12-26
  • 2023-01-07
  • 2013-02-16
  • 2019-10-31
  • 1970-01-01
相关资源
最近更新 更多