与其他一些人一起,我在使用应用程序的微服务体系结构并以自己想要的方式使用docker-compose
时遇到问题。
摘要:
我有X
个微服务项目(我们将其称为project A
,project B
和project C
。每个微服务都依赖于相同的容器(我们将其称为dependency D
和dependency E
。
问题:
理想情况下,项目A
,B
和C
在docker-compose中将全部都具有两个依赖项(D
和E
.yml文件;但是,这成为一个问题,因为docker compose将这些容器视为 duplicate 容器,而实际上,我想重用它们。这是常见的错误消息:
错误:对于A无法为服务A创建容器:b'冲突。的 容器“ sha”已在使用容器名称“ / A”。你必须 删除(或重命名)该容器,以便能够重用该名称。'
根据我所见,people are recommending that you define the container in one project and reference it使用networks
和外部链接。尽管这可行,但它会引入对另一个docker-compose yml文件(定义依赖项的文件)的依赖项。
我读过的另一种方法主张将容器隔离在其docker组合文件中,然后在要构建时引用多个文件。同样,尽管这可行,但它肯定不像docker通常使用的那样令人惊讶地方便。如果我无法解决问题,我会采用这种方法。
非单一回购世界中的其他人(特别是微服务)是否有其他方法取得成功?
有人要求我举例说明:
这是project A
和project B
的2个不同的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
答案 0 :(得分:1)
有一个名为external links的功能。从文档中:
链接到在docker-compose.yml之外甚至在Compose之外启动的容器,特别是对于提供共享或公共服务的容器。
具有多个docker-compose.yml
文件对于将容器组织成有意义的组也是很常见的。也许您的方案可以使用多个YAML文件和外部链接。