【问题标题】:Restoring redis running on docker from dump.rdb从 dump.rdb 恢复在 docker 上运行的 redis
【发布时间】:2016-10-07 13:43:43
【问题描述】:

我想做的是使用我从生产服务器获取的 dump.rdb,并在我的开发环境中使用它,这是由一个非常简单的 compose 文件定义的。

为简单起见,假设我的应用程序与此compose example from the docker docs 的redis 和flask 相同,因此docker-compose.yml 看起来像:

version: '2'
 services:
   web:
     build: .
     ports:
      - "5000:5000"
     volumes:
      - .:/code
     depends_on:
      - redis
   redis:
     image: redis

这会在重启之间保留 redis 数据,但您无法访问 redis 文件,因为 docker-compose.yml 中没有为 redis 安装卷。 因此,我更改了撰写文件以为 redis 挂载卷,并且我还想强制 redis 保留数据,official redis image docs 说如果我使用 'appendonly' 就会发生这种情况。

redis:
  image: redis
  command: redis-server --appendonly yes
  volumes:
    - ./redis:/data

如果我这样做,我的数据将被保留,就像在原始示例中一样,我现在可以在 /redis 路径中看到一个 dump.rdb 和 appendonly.aof。问题是,如果我想从 dump.rdb 恢复,我需要关闭 appendonly(例如,请参阅 digital Ocean 的 how-to-back-up-and-restore-your-redis-data-on-ubuntu-14 -04),并且没有仅附加,我看不到如何让撰写文件写入卷。

如何生成一个 docker compose,它将 redis 持久保存在一个我可以切换 dump.rdb 文件的卷中,从而将生产快照插入我的开发环境?

更新 以下 compose 有效,但在测试时请耐心等待,因为 dump.rdb 的创建不是即时的(因此它似乎失败了)。还有 redis 官方图像文档,暗示你必须在不使用时使用 appendonly:

redis:
  image: redis
  volumes:
    - ./redis:/data

【问题讨论】:

    标签: redis docker-compose


    【解决方案1】:

    appendonly 部分只是为了确保您不会丢失数据,但是由于您已经从服务器中获得了 dump.rdb,因此您无需担心:您可以删除 append only 标志或完全删除“命令”,因为它会回退到图像默认值,即“redis-server”。

    我有类似的设置 here,它可以正常写入/加载 dump.rdb 文件。 (404)

    【讨论】:

    • 谢谢@Chris - 比较撰写文件,一个区别是您正在构建自己的redis映像build redis(c.f.image redis),所以我认为可能是这样。我尝试使用你的 redis Dockerfile 来查看它是否是,但我仍然没有得到预期的结果。因此,我恢复到标准图像,删除“命令”,并在那里有一个卷。这似乎在某些时候可以解决它 - 有时我必须重新启动容器。我认为问题是dump.rdb文件创建没有被触发,但关闭容器会触发它。
    • @chris 通过删除 append only 你不认为 redis 容器在添加新数据时不会备份数据吗?那就是假设添加了新数据并且我的容器以某种方式停止了,所以如果我重新启动容器,新添加的数据是否仍然存在?
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2013-07-16
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多