docker-compose打开存储失败:运行时权限被拒绝错误

时间:2019-06-30 16:20:19

标签: docker docker-compose grafana prometheus

我正在尝试执行包含Prometheus和grafana配置的docker-compose.yml文件。

这是我的docker-compose.yml文件:

version: '2'
services:
  prometheus:
    image: prom/prometheus
    ports:
      - 9090:9090
    volumes:
      - /prometheus:/prometheus
    command: 
      - --config.file=/etc/prometheus/prometheus.yml 


  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    volumes:
      - /var/lib/grafana:/var/lib/grafana

每当我输入docker-compose -f docker-compose.yml up命令来运行它时,我都会遇到以下关于权限的错误:

prometheus_1  | level=error ts=2019-06-30T16:14:42.690Z caller=main.go:723 err="opening storage failed: lock DB directory: open /prometheus/lock: permission denied" 
prometheus_1  | level=error ts=2019-06-30T16:26:11.897Z caller=main.go:723 err="opening storage failed: mkdir data/: permission denied"

我不知道如何解决这个问题,我已经搜索了github问题和其他stackoverflow的问题,但是不幸的是,它们都没有帮助!

2 个答案:

答案 0 :(得分:1)

如果不需要从主机访问这些卷文件,请使用命名卷而不是主机挂载。 Docker将初始化命名卷的内容,包括权限和所有权,避免出现以下权限问题:

version: '2'

volumes:
  prometheus:
  grafana:

services:
  prometheus:
    image: prom/prometheus
    ports:
      - 9090:9090
    volumes:
      - prometheus:/prometheus
    command: 
      - --config.file=/etc/prometheus/prometheus.yml 

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana:/var/lib/grafana

对于解决主机安装的权限问题的一般解决方案,可以使用我的docker-base映像中的fix-perms脚本以及入口点和容器启动方式的更改来动态调整用户标识在容器中以匹配卷装载的容器。

答案 1 :(得分:1)

我的 docker-compose up 命令不断返回以下内容:

err="opening storage failed: lock DB directory: open /prometheus/lock: permission denied"

问题是您本地机器上的文件夹结构/文件的文件权限不正确,并且当 docker 容器启动时,它无法写入指定位置。

我通过使用以下命令递归 chown 文件夹来解决此问题:

sudo chown -R nobody:nogroup <local path>

一个例子,我的 docker-compose.yml 中的卷部分如下所示:

volumes:
  - /home/user/docker-volumes/prometheus:/prometheus

冒号表示本地文件路径的分隔:docker容器文件路径。应用我之前的 chown 示例,结果如下:

sudo chown -R nobody:nogroup /home/user/docker-volumes/prometheus

我的 docker-compose up 不再因权限被拒绝而失败!