Redis внутри Docker Compose Отказано в разрешении на создание файла RDB Crontab
Привет, у меня есть файл 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
Когда я запускаю docker-compose up, я получаю ошибку в журналах Redis:
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
Я попробовал все решения на разных платформах, но не смог заставить Redis работать. Подсказка или указание, как заставить это работать, будут высоко оценены.
Также небольшое краткое описание проблемы и подробное объяснение того, почему она происходит, также будет большим подспорьем для читателей и меня. С нетерпением жду.
1 ответ
Я столкнулся с той же проблемой при запуске контейнера Redis на AWS ECS аналогичным образом.
Я подключился к контейнеру Redis и выполнил:
redis-cli
> CONFIG GET dbfilename
Он вернул следующее:
1) "dbfilename"
2) "crontab"
Я попытался удалить файл crontab, запустивconfig set dbfilename "dbfilename"
который завершился с ошибкой.
Я обнаружил, что Redis работает без файла конфигурации. Поэтому я добавил дополнительный том для Redis и создал файл, используяtouch data/redis/config/redis.conf
.
Затем я соответствующим образом изменил свой файл компоновки:
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
После перезагрузки контейнера я запустил то же самоеCONFIG GET dbfilename
команда, но на этот раз файл crontab отсутствовал.
После этого все заработало :)
Также убедитесь, что вы установили пароль для своего сервера Redis, если он доступен из Интернета.
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}'