Redis in Docker Compose – Berechtigung für RDB-Datei Crontab verweigert

Redis in Docker Compose – Berechtigung für RDB-Datei Crontab verweigert

Hallo, ich habe folgende Datei docker-compose.yaml.

version: "3.9"

volumes:
  local_postgres_data2: {}
  local_postgres_data_backups2: {}

services:
  postgres:
    image: postgres
    container_name: angel-postgres
    restart: always
    volumes:
      - local_postgres_data2:/var/lib/postgresql/data:Z
      - local_postgres_data_backups2:/backups:z
    environment:
      POSTGRES_DB: angel-agility
      POSTGRES_HOST: localhost
      POSTGRES_USER: angel-user
      POSTGRES_PASSWORD: angel123
    ports:
      - "5432:5432"

  redis:
    container_name: angel-redis
    image: redis:latest
    ports:
      - '6379:6379'
    restart: unless-stopped

Wenn ich docker-compose up ausführe, erhalte ich in den Protokollen für Redis einen Fehler:

2276:C 29 Mar 2022 20:32:52.005 # Failed opening the RDB file crontab (in server root dir /etc) for saving: Permission denied
1:M 29 Mar 2022 20:32:52.105 # Background saving error

Ich habe alle Lösungen auf verschiedenen Plattformen ausprobiert, konnte Redis aber nicht zum Laufen bringen. Für einen Hinweis oder eine Anleitung, wie es funktioniert, wäre ich sehr dankbar.

Auch eine kurze Beschreibung des Problems im Detail, warum es auftritt, wäre für die Leser und mich eine große Hilfe. Ich freue mich darauf.

Antwort1

Ich bin auf dasselbe Problem gestoßen, als ich einen Redis-Container auf ähnliche Weise auf AWS ECS ausgeführt habe.

Ich habe mich mit dem Redis-Container verbunden und ausgeführt:

redis-cli
> CONFIG GET dbfilename

Das Ergebnis war:

1) "dbfilename"
2) "crontab"

Ich habe versucht, die Crontab-Datei durch Ausführen zu entfernen config set dbfilename "dbfilename", was mit einem Fehler fehlschlug.

Ich habe herausgefunden, dass Redis liefohneeine Konfigurationsdatei. Also habe ich ein zusätzliches Volume für Redis hinzugefügt und die Datei mit erstellt touch data/redis/config/redis.conf.

Dann habe ich meine Compose-Datei entsprechend geändert:

  redis:
    container_name: redis
    command: redis-server /conf/redis.conf
    image: redis:latest
    volumes:
       - "./data/redis/data:/data"
       - "./data/redis/config:/conf"
    ports:
      - '6379:6379'
    restart: unless-stopped

Nach dem Neustart des Containers habe ich denselben CONFIG GET dbfilenameBefehl ausgeführt, aber dieses Mal fehlte die Crontab-Datei.

Danach hat alles geklappt :)

Redis-Konfiguration

Stellen Sie außerdem sicher, dass Sie ein Kennwort für Ihren Redis-Server festlegen, wenn dieser über das Internet zugänglich ist.

    docker run -d \
    -h redis \
    -e REDIS_PASSWORD=your-super-secure-password \
    -v redis-data:/data \
    -v redis-config:/conf \
    -p 6379:6379 \
    --name redis \
    --restart always \
    redis:latest /bin/sh -c 'redis-server /conf/redis.conf --appendonly yes --requirepass ${REDIS_PASSWORD}'

verwandte Informationen