为什么无法通过docker-compose访问磁盘?

时间:2016-01-26 20:05:40

标签: docker redis docker-compose

根据docker文档,我尝试使用redis对python应用程序进行了非常简单的首次测试。这会在一段时间后崩溃,因为redis无法持续存在。我不知道为什么。你可以在这里找到公共回购: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图像做任何事情。

2 个答案:

答案 0 :(得分:24)

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

它可能没有,您可以通过多种方式修复它:使用docker volume而不是绑定挂载主机,或尝试通过在主机中使用匹配的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创建一个新的权限。

答案 1 :(得分:0)

我已使用工作版本更新了我的repo,标记为0.2

一旦我使用了docker文件的第2版,它运行良好。