你好,我有以下 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 服务器可以通过互联网访问,请确保为其设置密码。
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}'