在 docker 中禁用 redis 持久化

F.M*_*.F. 11 redis docker docker-compose

根据这个链接,可以通过设置来防止redis实例的持久化--save ''。但是,当我尝试在 docker-compose.yml 中使用该参数时,redis 实例仍会从磁盘加载数据库并保留所有数据:

version: '3'
services:
  redis:
    image: "redis:alpine"
    command: ["redis-server", "--save"]  # disable persistence
    ports:
      - "7777:6379"
Run Code Online (Sandbox Code Playgroud)

我也尝试过,command: ["redis-server", "--save", ""]但问题仍然存在。

如何强制执行非持久性(每次重新启动时为空 redis)?

Max*_*ske 12

--renew-anon-volumes 解决了 Redis 在停止后从前一个容器中检索卷的潜在问题。

docker-compose up --renew-anon-volumes
Run Code Online (Sandbox Code Playgroud)

请注意,这会影响在停止后保留其卷的其他容器,例如 MySQL 和 Postgres。

  • @AnatolyAlekseev 好问题![redis Dockerfile](https://github.com/docker-library/redis/blob/6ec0ad5628df2404509f776e9c70fbecf5364c10/5.0/alpine/Dockerfile#L72) 实际上会为您创建一个匿名卷,除非您明确调用,否则 Docker Compose 会跟踪该卷[`docker-compose down --volumes`](https://docs.docker.com/compose/reference/down/) 或 `docker-compose up --renew-anon-volumes`。 (2认同)

Luk*_*ský 11

不是很优雅,但有效:

  redis:
    image: "redis:5.0.3-alpine"
    command: [sh, -c, "rm -f /data/dump.rdb && redis-server"]  # disable persistence
Run Code Online (Sandbox Code Playgroud)

/data/dump.rdb 是Redis存储数据库的地方。


lar*_*ick 8

对我来说工作

command: redis-server --save "" --appendonly no
image: redis:alpine
Run Code Online (Sandbox Code Playgroud)