如何强制Docker撰写重新创建手动删除的卷?

时间:2019-10-18 11:13:21

标签: docker 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不要重复使用任何卷。

相反,我收到一个错误:泊坞窗缺少其体积数据。

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工作。

了解这个问题也很神奇。

期待您的帮助!

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用-V选项进行docker-compose?

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