docker - 为什么redis不能访问docker-compose中的磁盘?

标签 docker redis docker-compose

根据 docker 文档,我尝试了一个非常简单的带有 redis 的 python 应用程序的第一次测试。这会在一段时间后崩溃,因为 redis 无法持久化。我不知道为什么。你可以在这里找到公共(public) repo :Github repo

我当前的 docker-compose.yml 是:

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis:latest
  volumes:
  - ./data:/data

编辑:这是日志的摘录:

1:M 09 Feb 10:51:15.130 # Background saving error
1:M 09 Feb 10:51:21.072 * 100 changes in 300 seconds. Saving...
1:M 09 Feb 10:51:21.073 * Background saving started by pid 345
345:C 09 Feb 10:51:21.074 # Failed opening .rdb for saving: Permission denied
1:M 09 Feb 10:51:21.173 # Background saving error
1:M 09 Feb 10:51:27.011 * 100 changes in 300 seconds. Saving...
1:M 09 Feb 10:51:27.011 * Background saving started by pid 346
346:C 09 Feb 10:51:27.013 # Failed opening .rdb for saving: Permission denied

Edit2:这是 Redis 在 python 中抛出的完整错误:

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error

有趣的是,我没有对 redis 图像做任何事情。

最佳答案

是权限错误,通过docker exec -it redis_container_name bash登录redis容器,确保对/data有写权限。

可能没有,您可以通过多种方式修复它:使用 docker volume 而不是绑定(bind)挂载主机,或者尝试通过匹配 uid/gid 来修复主机的权限容器中的所有者。

此外,如 docker hub 页面所述,您应该将 redis 的命令设置为:

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis:latest
  command: redis-server --appendonly yes
  volumes:
  - ./data:/data

如果您打算持久化数据。

由于您的 data 文件夹设置了错误的权限,请先将其删除并让 docker-compose 创建一个新文件夹。

关于docker - 为什么redis不能访问docker-compose中的磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35022883/

相关文章:

docker - 在 docker run 命令中传递 ENV

iphone - 为什么 Objective-C 将 JSON 值转换为 ASCII 字符代码的散列?

php - 即使扩展加载正常,redis 也会抛出错误

docker-compose:将 docker 镜像的端口暴露给主机

r - 无法使用 FreeTDS 连接到 Docker 容器内的 Microsoft SQL Server

docker - 如何从容器内在主机上运行 podman 命令

java - Redis/Redisson LocalCachedMap - TTL/驱逐如何工作?

Docker-compose:用生产中预构建的镜像替换基于 "build"的服务?

Docker撰写不持久化数据

node.js - docker-compose 卷上的 Node 监视不注册删除事件