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

时间:2018-10-15 21:02:38

标签: docker redis

我试图在我的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

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

上述功能与开箱即用的功能不完全相同。我希望Docker为我自动创建./redis-data文件夹(如果不存在),但是不会。因此,我必须创建文件夹并确保正确设置了权限。然后,我期望Redis容器将其数据持久保存到appendonly.aof文件中,并使其定期自动保存。这就是我尝试此操作时在本地计算机上发生的情况。

但是,在服务器上,它没有为我保存appendonly.aof文件,因此,我要保留的数据没有得到保存,因此在重新启动堆栈时就在那里。

最奇怪的是,我为Sails.js应用程序创建了一个卷来获取日志文件,而无需为该应用程序创建文件夹。它只是创建了它,一切都按预期工作了。我在这里错过明显的东西吗?任何帮助将不胜感激。谢谢!

编辑

此外,如果我进入容器(docker exec -it container_id /bin/bash,则将其放入您的/data文件夹中也没有内容。这解释了为什么主机上也没有内容。

1 个答案:

答案 0 :(得分:0)

为完成这项工作,我对Redis服务使用了以下定义:

redis:
    image: 'redis:latest'
    environment:
        - REDIS_PASS=mypassword
        - REDIS_APPENDONLY=yes
        - REDIS_APPENDFSYNC=always
    volumes:
        - ./redis-data:/data
    deploy:
        replicas: 1

使用environment变量或设置似乎可以正常工作。

我从Docker文档的this mini tutorial中得到了这个想法。我不确定这是为什么工作的,因为Docker Hub上的redis映像文档未指定任何这些环境变量,而是说可以使用原始问题中提到的步骤,但是无论采用哪种解决方案工作。