从dump.rdb恢复在docker上运行的redis

时间:2016-10-07 13:43:44

标签: redis docker-compose

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

为简单起见,假设我的应用程序与redis和flask的compose example from the docker docs相同,所以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(例如,看看数字海洋的备份和恢复你的redis-data-on -ubuntu-14-04),并且没有附加 - 我无法看到如何让compose文件写入卷。

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

更新 以下组成有效,但在测试时请耐心等待,因为dump.rdb的创建不是即时的(因此看起来它似乎失败了)。此外,redis官方图片文档暗示您必须在不做的时候使用appendonly:

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

1 个答案:

答案 0 :(得分:1)

附加部分只是为了确保您不会丢失数据,但由于您已经从服务器获得dump.rdb,因此您不必担心:您可以删除仅附加标记或删除“命令”'完全是因为它将回退到图像默认值,这只是“redis-server'”。

我有一个类似的设置here,它可以很好地写入/加载dump.rdb文件。(404)