docker - 使 Docker Swarm 使用来自 Docker-Compose 的相同卷
问题描述
我有一个docker-compose.yml
包含一些服务的文件:
version: '3'
services:
# PostgreSQL
db:
image: postgres:12
volumes:
- postgres_data:/var/lib/postgresql/data/
# MongoDB Server
mongo:
image: mongo:4.2
volumes:
- mongo_data:/data/db
- mongo_data:/data/configdb
volumes:
mongo_data:
mongo_config:
postgres_data:
我一直在生产中工作,以docker-compose up -d
. 但现在我想docker stack deploy --compose-file docker-compose.yml mystack
用于未来的可扩展性。
问题是这些服务现在正在使用新的卷。所以我不能使用所有的数据库数据。我怎样才能让 Swarm 使用现有的docker-compose
卷?
任何形式的帮助将非常感激。提前致谢
解决方案
正如 Kiryl 指出的那样,答案是外部卷,但我在下面列出了几个步骤:
- 检查容器以获取它们正在使用的卷并获取它们的名称。这个答案表明如何做到这一点。
- 编辑
docker-compose.yml
文件以添加具有现有* 卷external
名称的密钥。结果如下:
volumes:
mongo_data:
external:
name: existing name...
mongo_config:
external:
name: existing name...
postgres_data:
external:
name: existing name...
- 首先
docker-compose up -d
检查所有卷是否正常。然后关闭docker-compose down
- 部署堆栈
docker stack deploy --compose-file docker-compose.yml mystack
此外,官方 Docker 论坛中也有同样的问题,那里有其他有用的解决方案和意见。
推荐阅读
- python-3.x - 如何从 google colab 上的另一个 .ipynb 文件导入一个 .ipynb 文件?
- python - Keras 精度和实际精度正好相反
- python - scrapy,无法在网站中找到文本阶段
- php - 使用 AJAX 和 PHP 更新图像 src
- java - 我无法弄清楚为什么我的数组列表没有使用我所说的新值进行更新
- matplotlib - 如何在Seaborn的情节旁边获得传奇?
- asp.net - Asp.net web api 控制器长查询字符串返回 BadRequest
- python - 如何修复始终为高的输入
- c# - 当我使用 Action<> 设置对象时,分配的对象始终为空
- javascript - 使用单选按钮组合显示 HTML 元素的逻辑