首页 > 解决方案 > 如何强制 docker compose 重新创建手动删除的卷?

问题描述

docker-compose.yml包含一个卷定义和一个使用它的服务。

#(This is a reduced but representative example)
services:
    mongo:
        image: mongo:3.6.11
        ...
        volumes:
          - "mongodb:/data/db/"

volumes:
    mongodb:
        driver: local
        driver_opts:
          type: "none"
          o: "bind"
          device: "$PWD/.storage/mongodb"

我已经删除了整个.storage/mongodb目录,想强制下一个docker-compose up不重用任何卷。

相反,我收到了一个错误:docker 丢失了它的卷数据。

Creating mongo       ... error

ERROR: for mongo  Cannot create container for service mongo: failed to mount local volume: mount <...>/.storage/mongodb:/var/lib/docker/volumes/mongodb/_data, flags: 0x1000: no such file or directory

我如何尝试解决这个问题:

  1. docker-build up --build --force-recreate. 容器的构建和重启不起作用。

  2. docker volume ls -q | while read id; do docker volume rm "$id"; done. 删除卷似乎也没有帮助。

我假设 docker 能够从删除的卷数据中恢复,因为第一次docker-compose up运行时没有初始化.storage目录。

基本上,我想docker-compose up工作。

理解这个问题也很棒。

期待您的帮助!

标签: dockerdocker-compose

解决方案


您是否尝试过 docker-compose up 与 -V 选项?

-V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving
                               data from the previous containers.

推荐阅读