
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 dbfilename
Befehl ausgeführt, aber dieses Mal fehlte die Crontab-Datei.
Danach hat alles geklappt :)
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}'