首页 > 解决方案 > 使 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卷?

任何形式的帮助将非常感激。提前致谢

标签: dockerdocker-composedocker-swarm

解决方案


正如 Kiryl 指出的那样,答案是外部卷,但我在下面列出了几个步骤:

  1. 检查容器以获取它们正在使用的卷并获取它们的名称。这个答案表明如何做到这一点。
  2. 编辑docker-compose.yml文件以添加具有现有* 卷external名称的密钥。结果如下:
volumes:
    mongo_data:
        external:
            name: existing name...
    mongo_config:
        external:
            name: existing name...
    postgres_data:
        external:
            name: existing name...
  1. 首先docker-compose up -d检查所有卷是否正常。然后关闭docker-compose down
  2. 部署堆栈docker stack deploy --compose-file docker-compose.yml mystack

此外,官方 Docker 论坛中也有同样的问题,那里有其他有用的解决方案和意见。


推荐阅读