【发布时间】:2019-02-22 00:23:38
【问题描述】:
与其他一些人一样,我在使用应用程序的微服务架构和以我想要的方式使用 docker-compose 时遇到问题。
总结:
我有X 微服务项目(我们称之为project A、project B 和project C。每个微服务都依赖于相同的容器(我们称之为dependency D 和dependency E。
问题:
理想情况下,项目 A、B 和 C 将 ALL 在其 docker-compose.yml 文件中具有两个依赖项(D 和 E);然而,这成为一个问题,因为 docker compose 将这些视为 duplicate 容器,而实际上我想重用它们。这是一个常见的错误信息:
错误:对于 A 无法为服务 A 创建容器:b'冲突。这 容器名称“/A”已被容器“sha”使用。你必须 删除(或重命名)该容器以便能够重用该名称。'
据我所见,people are recommending that you define the container in one project and reference it 使用networks 和外部链接。虽然这可行,但它引入了对不同 docker-compose yml 文件(定义依赖项的文件!)的依赖。
我读过的另一种方法主张在它们的 docker compose 文件中隔离容器,然后在您想要构建时引用多个文件。同样,虽然这可行,但它肯定不像 docker 通常使用的那么方便。如果我无法找到解决方案,我将采用这种方法。
非单一回购世界中的其他人(特别是微服务)是否通过不同的方法取得了成功?
有人要求我用一些例子来澄清一下:
这是 project A 和 project B 的 2 个不同的 compose yml 文件的样子:
项目A:
version: '2'
services:
dependencyD:
image: dependencyD:latest
container_name: dependencyD
dependencyE:
image: dependencyE:latest
container_name: dependencyE
projectA:
image: projectA:latest
container_name: projectA
depends_on:
- dependencyD
- dependencyE
项目 B:
version: '2'
services:
dependencyD:
image: dependencyD:latest
container_name: dependencyD
dependencyE:
image: dependencyE:latest
container_name: dependencyE
projectB:
image: projectB:latest
container_name: projectB
depends_on:
- dependencyD
- dependencyE
【问题讨论】:
-
你能发布一个示例 docker-compose 文件吗?
-
我不明白是什么问题
-
首先,您不能在一个主机中拥有两个同名的容器(由 docker run 或 compose 文件中的 container_name 指定)。您可以使用多个撰写文件,但 docker 不会启动容器。此外,您对项目和依赖项使用相同的名称会造成混淆。项目 A 和依赖项 A 是相同的还是不同的?正如 reco 建议的那样,您可以发布一些您正在使用的撰写文件吗?
-
我添加了一些示例。对于可能令人困惑的描述,我深表歉意
标签: docker docker-compose microservices