Docker Compose 内の Redis で RDB ファイルの Crontab の権限が拒否されました

Docker Compose 内の Redis で 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

同様の方法で AWS ECS 上で Redis コンテナを実行すると、同じ問題が発生しました。

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}'

関連情報