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

标签 redis docker-compose

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

为简单起见,假设我的应用与此 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

最佳答案

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

我有一个类似的设置 here并且它写入/加载 dump.rdb 文件正常。 (404)

关于redis - 从 dump.rdb 恢复在 docker 上运行的 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39918762/

相关文章:

docker - 如何使用与主机共享的数据创建命名 Docker 数据卷

python - Redis 扫描命令匹配选项在 Python 中不起作用

model-view-controller - 哪些 JavaScript 框架和库最适合跨平台 MMO 游戏开发?

azure - 如何在 docker-compose 中为 Azure blob 存储配置目标容器?

docker-compose - 使用 Docker Compose 构建多个图像?

linux - Docker 不会对 daemon.json 应用更改

Docker-nginx-反向代理: host not found in upstream when building with docker-compose

ruby-on-rails - 我的 Rails 应用程序在 Heroku 上的 redis 缓存

asp.net-mvc-4 - 如何在主机服务器中配置多个 Redis 端口

docker - 如何使用 Docker Compose 连接到 Redis 容器?