Docker Stack/Compose Redis 实例不持久化数据

标签 docker redis

我正在尝试将 Redis 用作我的 Sails.js 应用程序中的缓存,但我很难让卷正常工作并让 Redis 实例自动保留数据。

这是我的 stack.yml 文件的(相关部分):

redis:
  image: 'redis:latest'
  command: redis-server --appendonly yes
  command: ['redis-server', '--requirepass', 'mypasswordgoeshere']
  volumes:
    - ./redis-data:/data
  deploy:
    replicas: 1

我也有一个 Sails.js 服务和一个 Angular 应用程序服务,但没有显示它们,因为这里并不真正需要它们。

以上内容并没有完全按照开箱即用的预期工作。我希望 Docker 自动为我创建 ./redis-data 文件夹(如果不存在),但它没有。所以我必须创建文件夹并确保权限设置正确。然后我希望 Redis 容器将其数据保存到 appendonly.aof 文件中,并定期自动保存。这就是我尝试此操作时在本地计算机上发生的情况。

但是,在服务器上,它不会为我保存 appendonly.aof 文件,因此我想要保留的数据不会被保存,所以当堆栈存在时它就在那里重新启动。

其中最奇怪的部分是我为 Sails.js 应用程序创建了一个卷来访问日志文件,而我不需要为该应用程序创建文件夹;它刚刚创建了它,并且一切都按预期运行。我在这里遗漏了一些明显的东西吗?任何帮助将不胜感激。谢谢!

编辑

此外,如果我进入容器 (docker exec -it container_id/bin/bash/data 文件夹中没有任何内容可以让您进入。这就解释了为什么主机上也没有任何内容。

最佳答案

对于任何使用 Redis Stack 的人来说,解决我的问题的方法是添加以下内容

environment:
    REDIS_ARGS: --save 20 1

我假设参数的任何值,或使用 AOF 模式,也可以,但我没有验证这一点。

我最初尝试将其指定为

command: redis-server --save 20 1

基于 this教程。但是,这会在运行 docker-compose up 时导致 ConnectionError("Connection is not ready") ( source )。

关于Docker Stack/Compose Redis 实例不持久化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52824727/

相关文章:

.net - 如何在Wine 64位前缀中安装.NET 4?

javascript - 如何在useEffect中使用更新的值

docker - 如何在运行Docker容器时/之后打开外壳而不覆盖现有CMD?

java - 无法序列化 session 的 session 属性 SPRING_SECURITY_CONTEXT

javascript - node.js/socket.io 消失变量

mysql - Docker nfs 卷 mysql - 如何修复 : "failed to copy file info"

docker - 将堆栈部署到远程集群

redis - Redlock.net 无法获取锁

java - 如何捕获 redis.serializer.SerializationException

sorting - 使用 SORT 命令从 Redis 中的排序集中获取 HASH 字段