Docker 带有 Mariadb 的容器 - 容器会变砖并丢失数据吗

Docker container with Mariadb - Can the container get bricked and lose data

我想我可以按照我的另一个建议使用装订卷 post

但我读到容器应该是无状态的。所以看来我的想法是错误的?

我不知道会发生什么灾难性故障,所以如果容器变砖,我是否有可能丢失所有数据?或者有没有办法使用外部存储和恢复?

如何处理这种情况?我有一个管理迁移的模式 table,所以不希望 table 是新的并从方块 1

开始

问题:我应该让云上的mariadb容器写到它喜欢的任何地方吗?或写入主机文件夹?

我的 docker - 撰写片段

  mariadb:
    image: mariadb:10.4
   ...
    environment:
      ..
    logging:
...
    networks:
      - backend
    restart: on-failure
    volumes:
      - maria_volume:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
  
# Volumes
volumes:
  maria_volume:

另一个版本是(./mariadb 而不是卷部分中的 maria_volume)

    networks:
      - backend
    restart: on-failure
    volumes:
      - ./mariadb:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
  

您的应用程序总体上需要将数据保存在某处。挂载存储的关系数据库容器很好。在生产环境中,您可以选择 运行 非容器数据库或使用云托管数据库(如果这能更好地满足您的需求)。

我觉得实际的存储机制非常强大,对于命名卷和绑定挂载的主机目录都是如此。在任何一种情况下,您都可能不会遇到数据损坏问题。一如既往,如果数据非常重要,请确保您有数据备份。

此处在使用命名卷和主机目录之间没有明确的选择。主机目录可能更容易备份和恢复;在某些平台上,命名卷会更快。在这两种情况下,在正常操作中,数据将在销毁和重新创建容器后继续存在。使用 docker 命令破坏命名卷的状态会更容易一些,这取决于您的特定用例,可以指向任一方向。

我偶尔会遇到 Docker 的内部状态被破坏,当这种情况发生时,最简单的解决方法是删除整个 /var/lib/docker 树并重新开始(有一个等效的Docker 桌面应用程序中的“重置”按钮)。此路径也会丢失命名卷。在本机 Linux 上,人们普遍观察到实际的命名卷存储只是一个目录,因此您可以保留它。