Docker 內的 Redis 對 RDB 檔案 Crontab 的 Compose 權限被拒絕

Docker 內的 Redis 對 RDB 檔案 Crontab 的 Compose 權限被拒絕

您好,我有以下 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}'

相關內容