Redis внутри Docker Compose Отказано в доступе для файла RDB Crontab

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

Также убедитесь, что вы установили пароль для своего сервера 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}'

Связанный контент