Redis и Docker Permission Denied
Пытаюсь создать телеграм бота с сохранением данных в redis в docker. Работает нормально, но со временем подвисает и выдает ошибку:
Failed opening the RDB file crontab (in server root dir /etc) for saving: Permission denied
Мой docker-compose.yml
version: "3.9"
services:
redis:
container_name: redis
image: redis:5.0.4-alpine
user: root
command:
- redis-server
- '--loglevel debug'
- '--databases 2'
- '--save 1 10'
- '--dbfilename dump.rdb'
volumes:
- 'redis:/data'
env_file:
- .env
restart: on-failure
ports:
- "6379:6379"
bot:
build: .
command: python main.py
user: root
env_file:
- .env
restart: always
depends_on:
- redis
volumes:
redis:
Мой Dockerfile:
FROM python:3.12
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV TZ=Europe/Moscow
RUN apt-get update && apt-get install -yy tzdata
RUN cp /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /app
RUN TZ=Europe/Moscow
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
RUN chmod 777 .
COPY . .
Проверил логи: После запроса с определенного IP
redis | 1:M 05 May 2024 23:36:42.038 - Accepted IP:36164
Выводятся сообщения
Failed opening the RDB file root (in server root dir /var/spool/cron) for saving: Permission denied
redis | 1:M 05 May 2024 23:36:45.174 # Background saving error
redis | 1:M 05 May 2024 23:36:45.337 # Failed opening the RDB file root (in server root dir /var/spool/cron) for saving: Permission denied
redis | 1:M 05 May 2024 23:36:45.886 # Failed opening the RDB file root (in server root dir /etc/crontabs) for saving: Permission denied
redis | 1:M 05 May 2024 23:36:46.160 # Failed opening the RDB file root (in server root dir /etc/crontabs) for saving: Permission denied
После этого проверяя config file redis, вылезает :
127.0.0.1:6379> config get dbfilename
1) "dbfilename"
2) "crontab"
127.0.0.1:6379>
То есть он меняет dump.rdb на contrab
Ответы (1 шт):
Проблема была в том, что redis не требовал код для подключения к серверу, в итоге китайские боты заходили на мой сервак и ddos-или, меняя файлы БД, как я понял, чтобы майнить на серваке, IP Был один и тот же, после него все ломалось.
Решилось добавлением:
services:
redis:
container_name: redis
image: redis:5.0.4-alpine
user: root
command:
- redis-server
- '--loglevel debug'
- '--databases 2'
- '--save 1 10'
- '--dbfilename dump.rdb'
- '--requirepass $REDIS_PASSWORD' #Не забывайте про пароль :)
- '--rename-command CONFIG "cfg0880"'
volumes:
- 'redis:/data'
env_file:
- .env
restart: on-failure
ports:
- "6379:6379"