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

pjl*_*b12 3 redis docker

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

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

redis:
  image: 'redis:latest'
  command: redis-server --appendonly yes
  command: ['redis-server', '--requirepass', 'mypasswordgoeshere']
  volumes:
    - ./redis-data:/data
  deploy:
    replicas: 1
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

编辑

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

小智 6

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

environment:
    REDIS_ARGS: --save 20 1
Run Code Online (Sandbox Code Playgroud)

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

我最初尝试将其指定为

command: redis-server --save 20 1
Run Code Online (Sandbox Code Playgroud)

这是基于教程的。然而,这导致运行时出现ConnectionError("Connection is not ready")docker-compose up) 。