【问题标题】:How to completely destroy Mongo database created by docker-compose?如何彻底销毁 docker-compose 创建的 Mongo 数据库?
【发布时间】:2019-12-03 23:06:29
【问题描述】:

我正在使用docker-compose 创建一个 MongoDB 服务。这是它的外观:

services:
  database:
    image: 'mongo'
    environment: 
      - MONGO_DATA_DIR=/data/db
      - MONGO_INITDB_DATABASE=azunyan
    volumes:
      - ./container-scripts/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js
      - ./data/db:/data/db

我使用sudo docker-compose up --build -d database 构建和运行服务,这将创建 MongoDB 容器。

在测试期间,我通过mongo <container ip address> 连接到数据库并发出一些 mongo 命令(例如db.createCollection()),向数据库添加了一些集合

之后,我使用sudo docker-compose down -v 来删除容器,并且我还运行sudo docker system prune -a -f 来确定。我希望下次构建和运行映像时,数据库应该是空的(即没有集合),但是我可以看到集合仍然存在。为什么?如何获得干净的 MongoDB 容器?

【问题讨论】:

  • 您将实际数据存储在主机上的./data/db 中;你对那个目录做了什么吗?
  • 暂时没有,但即使我删除了那个文件夹,我仍然可以看到这些收藏
  • 尝试删除文件夹,然后执行 docker-compose up -d --force-recreate。如果这没有帮助,您可以尝试 docker-compose down。任何属于 compose 项目的匿名或命名卷都将与它一起被销毁。
  • 我假设您不想通过 docker system prune -a -f --volumes 修剪 mongo-init.js?
  • 如果您在删除数据文件夹后仍然看到集合,那么您认为您正在使用的数据文件夹不是实际使用的文件夹。

标签: mongodb docker docker-compose containers


【解决方案1】:

您需要删除您的数据目录,然后销毁并重新创建您的数据库容器。

docker-compose down
rm -rf ./data/db
docker-compose up -d database

注意:您不需要 --build 标志,因为您在 docker-compose 文件中引用了预构建映像。您也不需要指定database 服务,除非您的撰写文件中有其他条目没有添加到示例中。你也不需要docker system prune

【讨论】:

  • 你能解释一下为什么我不需要docker system prune吗?
  • 所以你使用的命令docker system prune -af 将删除停止的容器、未使用的网络、没有关联容器的未使用镜像,并构建缓存。如果您要运行docker system prune -af --volumes,它仍然对您的情况没有帮助,因为您是从文件系统安装./container-scripts/mongo-init.js./data/db,而不是由docker 管理的命名卷。
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 2017-03-07
  • 2012-12-06
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多