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

Ali*_*r H 7 redis docker-compose

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

为简单起见,假设我的应用程序与redis和flask的docker docs中的这个组合示例相同,所以docker-compose.yml看起来像:

version: '2'
 services:
   web:
     build: .
     ports:
      - "5000:5000"
     volumes:
      - .:/code
     depends_on:
      - redis
   redis:
     image: redis
Run Code Online (Sandbox Code Playgroud)

这会在重新启动之间持续存在redis数据,但您无法访问redis文件,因为docker-compose.yml中没有为redis安装卷.所以我改变我的compose文件为redis安装一个卷,我也想强制redis来保存数据,官方的redis图像文档说如果我使用'appendonly'就会发生这种情况.

redis:
  image: redis
  command: redis-server --appendonly yes
  volumes:
    - ./redis:/data
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我的数据将保持原样,就像它们在原始示例中一样,我现在可以在/ redis路径中看到dump.rdb和appendonly.aof.问题是,如果我想从dump.rdb恢复,我需要关闭appendonly(例如,请参阅数字海洋的如何备份和恢复你的redis-data-on-ubuntu-14 -04),并且没有append-only我看不到如何让compose文件写入卷.

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

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

redis:
  image: redis
  volumes:
    - ./redis:/data
Run Code Online (Sandbox Code Playgroud)

Chr*_*ner 1

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

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