【问题标题】:MongoDB wipes whenever host does is down每当主机关闭时,MongoDB都会擦除
【发布时间】:2019-03-12 11:40:54
【问题描述】:

我在 Digital Ocean Droplet 上有一个 web api。他们最近对我的 api 所在的集群进行了维护。之后,我的数据库中的所有数据都清空了。这是第二次由于服务器宕机而发生这种情况。检查文件结构,我注意到似乎有重复的数据,嵌套更深一层。

我感觉来自 docker compose 的这个块可能是罪魁祸首。

mongo:
image: mongo:3.6
ports:
  - 27017:27017
volumes:
  - ./data/mongo:/data/db
networks:
  - my-api

我可以采取哪些步骤来解决此问题?

【问题讨论】:

    标签: node.js mongodb docker docker-compose backend


    【解决方案1】:

    您已在相对路径中定义了 bind mount(volume),这是不鼓励的。

    ./data/mongo:/data/db
    

    正如creack in github所提到的那样 不保证数据始终位于此类路径下。

    怎么样?让我们假设撰写文件的实际路径是/absolute/path/to/docker-compose.yml。我将目录更改为/absolute/path/to/data/mongo 并执行docker-compose -f ../../docker-compose.yml up -d。在这种情况下,我的 pwd ==> /absolute/path/to/data/mongo 变为 . 并且 docker 创建了 data/mongo,因为该文件夹在此位置不可用。这就是你的情况。

    这里:分隔符,用于分隔主机路径和docker路径。例如:/host/path:/docker/path。这里您在左侧提到的目录/host/path 被绑定为右侧Docker 内部的路径,即/docker/path。不需要创建主机路径和 docker 路径。在这种情况下,docker 在两个位置创建它们。

    您甚至可以将卷挂载为只读,在这种情况下,最后使用另一个 : 并使用ro 将其标记为只读. /host/path:/docker/path:ro。这里docker容器只能读取/docker/path(间接/host/path)的文件,不能在该位置写任何东西。

    除了挂载主机目录外,您还可以使用相同的方式挂载数据卷
    还有其他类型的卷可用,您可以查看参考以了解其中的一些。除此之外,您还拥有允许安装高级功能的插件,例如安装谷歌驱动器、NFS、...

    我建议您 read this 以了解在 docker-compose 中指定卷的更复杂的方法。

    我们总是鼓励您提供绝对路径,因为它可以保证位置。

    奖金

    您还可以将restart:always 添加到您的撰写中,因为这是一个数据库,并且需要始终处于启动状态。 Refer this for other restart-policy options.

    解决办法:

    所以,你的 docker compose 文件应该是

    mongo:
    image: mongo:3.6
    ports:
      - 27017:27017
    restart:unless-stopped
    volumes:
      - /absolute/path/to/data/mongo:/data/db
    networks:
      - my-api
    

    注意: 如果在容器运行时系统重新启动,添加重启策略也会启动容器。我没有使用restart:always 是有原因的。我鼓励你自己找到它。

    参考资料:

    1. Use volumes
    2. Use bind mounts
    3. volumes
    4. Manage data in Docker
    5. Understanding Volumes in Docker

    【讨论】:

    • 您能否更清楚地说明 /data/mongo:/data/db 中的冒号表示什么?
    • 答案已更新,抱歉,您必须自己研究一下才能理解其他一些概念。
    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多