使 Docker Swarm 使用 Docker-Compose 中的相同卷

问题描述 投票:0回答:2

我有一个包含一些服务的

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
卷?

任何形式的帮助将不胜感激。预先感谢

docker docker-compose docker-swarm
2个回答
4
投票

正如 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. 关闭
  3. 使用
    docker stack deploy --compose-file docker-compose.yml mystack
  4. 部署堆栈

另外,在Docker官方论坛中也有同样的问题,那里还有其他有价值的解决方案和意见。


2
投票

考虑使用外部卷

© www.soinside.com 2019 - 2024. All rights reserved.