我将尝试描述我想要的功能:
我正在运行 docker swarm
超过 docker-compose
在 docker-compose 中,我有服务,为简单起见,我们称之为 A
, B
, C
.
假设 C
服务需要可以访问包含共享代码模块的服务 A
和 B
.
我的问题是:
1.是否每个需要访问共享卷的服务都必须挂载C
服务到它自己的本地文件夹,(使用下面的卷部分)或者可以在不安装/复制到本地容器中的路径的情况下访问它。
A
和 B
将驻留在计算机中 X
, 而服务 C
将驻留在计算机上 Y
.是不是因为服务都维护在同一个docker下
swarm stack
,他们将毫无问题地与服务进行通信 C
. 如果不是,它应该实现哪些定义?
我的结构是这样的:
version: "3.4"
services:
A:
build: .
volumes:
- C:/usr/src/C
depends_on:
- C
B:
build: .
volumes:
- C:/usr/src/C
depends_on:
- C
C:
image: repository.com/C:1.0.0
volumes:
- C:/shared_code
volumes:
C:
最佳答案
如果你分享的是代码,你应该将它构建到实际的 Docker 镜像中,而不是尝试为此使用卷。
你会遇到两个大问题。一个是在多主机安装中正确共享卷。第二个是一个更长期的问题:如果共享代码发生变化,你会怎么做?您不能只使用共享代码重新部署 C 模块,因为保存代码的卷已经存在;您需要单独更新卷中的代码,重新启动依赖服务,并希望它们都能正常工作。实际上,将代码烘焙到图像中可以在尝试部署之前测试完整的设置。
关于Docker swarm 有一些共享卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51268853/