提问人:Jagerber48 提问时间:4/6/2023 更新时间:4/6/2023 访问量:483
多个 docker compose 文件和共享卷
Multiple docker compose files and sharing volumes
问:
我正在尝试设置一些docker compose文件,每个项目有一个compose文件。每个项目都有自己的文件夹,其中包含自己的 docker compose 文件。但是,我想要一种方便的方式来启动所有这些docker compose文件(它们之间可能存在依赖关系?我找到了一种使用关键字执行此操作的好方法(参见 https://docs.docker.com/compose/extends/)。但是我在共享卷方面遇到了一个小问题。extends
这个问题类似于在单独的 docker compose 文件之间共享卷,但我认为问题和答案可能是以前写的,可以包含在顶级卷部分定义的卷中,所以我认为答案现在可能会有所不同。问题也略有不同。这个重点是从顶级撰写文件启动多个撰写文件。name
我正在使用命名卷,以便卷由 docker 管理。此外,我不知道是首先调用顶级还是较低级别的撰写文件,因此我希望这两个文件都能够创建卷(如果尚不存在)。这意味着我不想为任一文件中的卷设置。external: true
我的代码大致是这样的。目录结构为:
Servers
|-- docker-compose.yaml
|-- project_1
| |-- p1-docker-compose.yaml
|-- project_2
| |-- p2-docker-compose.yaml
docker compose 文件内容为
# Servers/project_1/p1-docker-compose.yaml
version: '3.8'
services:
service_1:
image: image_1
volumes: service_1_data
volumes:
service_1_data:
# Servers/project_2/p2-docker-compose.yaml
version: '3.8'
services:
service_2:
image: image_2
volumes: service_2_data
volumes:
service_2_data:
# Servers/docker-compose.yaml
version: '3.8'
services:
service_1:
extends:
file: project_1/p1-docker-compose.yaml
service: service_1
service_2:
extends:
file: project_2/p2-docker-compose.yaml
service: service_2
volumes:
service_1_data:
name: project_1_service_1_data
service_2_data:
name: project_2_service_2_data
在顶级 docker compose 文件中,需要项目前缀,因为如果使用较低级别的 docker compose 文件创建卷,则会添加这些前缀。或者,我可以在所有较低和较高级别的 docker compose 文件中显式指定不带前缀的名称,这将产生类似的结果。
这一切实际上都有效。我可以使用较低级别或较高级别的 docker compose 文件启动容器,并且在所有情况下都使用相同的卷。
但是有一个小问题。假设我首先在文件夹中运行,使用顶级 docker compose 来启动容器。这也将创建名为 和 的卷。但是,如果我现在放下容器,然后进入并执行,容器将正常旋转并使用正确的体积,但我收到以下警告:docker compose up -d
Servers
project_1_service_1_data
project_2_service_2_data
project_1
docker compose up -d
WARN[0000] volume "project_1_service_1_data" already exists but was not created for project "servers". Use `external: true` to use an existing volume
此消息令人困惑,因为该卷实际上是为项目“服务器”创建的。它不是为项目“project_1”创建的。事实上,如果我这样做,我会看到docker volume inspect project_1_service_1_data
"com.docker.compose.project": "servers"
从本质上讲,问题是:
- 有没有办法配置这些撰写文件以避免收到上面显示的警告?
- 通常有没有更好的方法来使用 docker compose 来完成我在这里尝试做的事情?
答: 暂无答案
评论