mdi*_*bio 2 redis docker-compose redis-stack-server
如果我使用使用 docker compose 配置的默认redis docker 映像,如下所示:
redis-storage:
image: redis:7.0
container_name: 'redis-storage'
command: ["redis-server", "--save", "1200", "32", "--loglevel", "warning"]
volumes:
- redis-storage-data:/data
Run Code Online (Sandbox Code Playgroud)
如果至少有 32 个更改,它会正常启动并每 20 分钟写入一次磁盘。
但是,如果我使用相同的command方法,image: redis/redis-stack-server:latest它似乎可以正常启动,但它实际上会进入保护模式并且变得无法访问。注释掉命令,一切正常。
command允许更改默认保存到磁盘参数的 docker-compose 格式正确的是什么?
(还尝试了替代语法command: redis-server --save 1200 32:)
工作解决方案docker-compose schema '3.8':
redis-stack-svc:
image: redis/redis-stack-server:latest
# use REDIS_ARGS for redis-stack-server instead of command arguments
environment:
- REDIS_ARGS=--save 1200 32
volumes:
- my-redis-data:/data
Run Code Online (Sandbox Code Playgroud)
找到一个清晰、不冲突的例子并不容易。还有一些历史错误。
对于redis-stack-server(当不使用安装到容器的本地redis-stack.conf文件时)底层redis的配置可以通过环境变量传入,REDIS_ARGS而不是直接传递到命令。(还有堆栈模块的环境变量,例如REDISJSON_ARGS等。
然而“保存”却特别挑剔。它需要两个参数(seconds, changes),但大多数配置参数需要一个。引用参数的某些形式会使其看起来像一个参数,并且底层参数解析器将被忽略或报告“参数数量错误”并将服务器置于保护模式。
对于save,您还可以指定多个条件。例如,默认值为:
save 3600 1 300 100 60 10000
(如果写入 1 次,则在 1 小时后保存;如果写入 100 次,则在 5 分钟后保存;如果写入 10000 次,则在 60 秒后保存)
对于原始redis容器,您可以使用以下格式在 docker-compose 中将其指定为命令行参数:
redis-storage:
image: redis:7.0
command: ["redis-server", "--save", "3600", "1", "300", "100", "60", "10000"]
volumes:
- my-redis-data:/data
Run Code Online (Sandbox Code Playgroud)
然而,底层参数解析逻辑会产生一个问题,redis-stack
这两种格式都将被错误地解析:
# (valid syntax but ignored...'save' is actually set to 'nil')
environment:
- REDIS_ARGS=--save 3600 1 300 100 60 10000
# ('invalid number of arguments', server not started)
environment:
- REDIS_ARGS="--save 3600 1 300 100 60 10000"
Run Code Online (Sandbox Code Playgroud)
正确的语法很晦涩:
# (using non-default values here to validate the behavior)
environment:
- REDIS_ARGS=--save 3602 1 --save 302 100 --save 62 10000
Run Code Online (Sandbox Code Playgroud)
如果您docker exec进入正在运行的容器并调用redis-cli CONFIG GET save它将返回:
root@f45860:/data# redis-cli CONFIG GET save
1) "save"
2) "3602 1 302 100 62 10000"
Run Code Online (Sandbox Code Playgroud)
Redis 开发人员文档中还有一个替代的 compose 语法示例
environment:
- REDIS_ARGS:--save 20 1
Run Code Online (Sandbox Code Playgroud)
但 compose schema 3.8 会抱怨(示例使用 schema 3.9)
| 归档时间: |
|
| 查看次数: |
6687 次 |
| 最近记录: |