保持 Redis 数据在 Docker 容器中的 docker-compose down 和 up 之间保持活跃

Posted

技术标签:

【中文标题】保持 Redis 数据在 Docker 容器中的 docker-compose down 和 up 之间保持活跃【英文标题】:Keep Redis data alive between docker-compose down and up in Docker container 【发布时间】:2021-01-02 12:09:33 【问题描述】:

问题是关于保持Redis 数据在docker-compose updocker-compose down. 之间保持活跃

在下面的docker-compose.yaml 文件中db 服务使用-postgres_data:/var/lib/postgresql/data/ 卷来保持数据活动。 我想为redis 服务做这样的事情,但我找不到可行的解决方案。我设法实现这一目标的唯一一种方法是将数据存储在本地存储中- ./storage/redis/data:/data.所有外部卷实验都没有结果。

问题是——是否有可能以某种方式将docker-compose downdocker-compose up 之间的redis 数据存储在一个卷中,就像它在DB 服务中一样?

对不起,如果问题很幼稚......

谢谢

version: '3.8'

services:
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    env_file:
      - ./series/.env
    volumes:
      - .:/code
    ports:
      - 8000:8000
    depends_on:
      - db
      - redis

  db:
    build:
      context: .
      dockerfile: postgres.dockerfile
    restart: always
    env_file:
      - ./series/.env
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=1q2w3e
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    ports:
      - target: 5432
        published: 5433
        protocol: tcp
        mode: host

  redis:
    image: redis:alpine
    command: redis-server --appendonly yes
    ports:
      - target: 6379
        published: 6380
        protocol: tcp
        mode: host
    volumes:
        - ./storage/redis/data:/data
    restart: always
    environment:
      - REDIS_REPLICATION_MODE=master

volumes:
    postgres_data:




【问题讨论】:

【参考方案1】:

您只需要在postgres_data 旁边为 Redis 数据添加一个命名卷:

volumes:
    postgres_data:
    redis_data:

然后将主机路径更改为命名卷:

  redis:
    ...
    volumes:
        - redis_data:/data

如果 Redis 使用主机路径保存数据,那么上面的方法对你有用。我提到这一点是因为您必须配置 Redis 以启用持久存储(请参阅 Redis Docker Hub 页面https://hub.docker.com/_/redis)。

注意,运行 docker-compose down -v 也会破坏卷。

【讨论】:

感谢您的回答。无需配置任何东西。似乎默认情况下持久存储有效

以上是关于保持 Redis 数据在 Docker 容器中的 docker-compose down 和 up 之间保持活跃的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite3 数据库在 Docker 容器中保持只读且不可创建。如何让它可写?

docker数据管理

DOCKER简明教程 : 通过容器连接REDIS数据库

云原生之使用Docker部署Redis数据库

redis docker - 使用数据创建容器

Docker 容器无法连接到 Redis