docker-compose: 绑定挂载时目录权限错误
docker-compose: directory permission errors on bind mount
尝试使用 prometheus
图像启动 docker-compose
堆栈(尽管实际服务相当不相关。
我创建了以下目录来保存 prometheus
数据。
$ ls -ald /prometheus_data/
drwxrwxr-x 3 root root 4096 Jan 17 07:24 /prometheus_data/
并在 docker-compose
中设置服务如下:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus/:/etc/prometheus/
- /prometheus_data:/prometheus_data:rw
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus_data'
- '--storage.tsdb.retention=4d'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
ports:
- 9090:9090
depends_on:
- cadvisor
restart: always
然而服务失败:
prometheus_1 | level=error ts=2019-01-17T09:35:09.200050622Z caller=main.go:579 err="Opening storage failed open DB in /prometheus_data: open /prometheus_data/146791472: permission denied"
prometheus_1 | level=info ts=2019-01-17T09:35:09.20007784Z caller=main.go:581 msg="See you next time!"
服务不是root
用户发起的吗?
为什么会出现上述权限错误?
根据 prometheus
的 Dockerfile
,USER
设置为 nobody
。
因此服务无法访问上述目录是有道理的。
所以问题通过执行
解决了
chgrp -R nogroup /prometheus_data
尝试使用 prometheus
图像启动 docker-compose
堆栈(尽管实际服务相当不相关。
我创建了以下目录来保存 prometheus
数据。
$ ls -ald /prometheus_data/
drwxrwxr-x 3 root root 4096 Jan 17 07:24 /prometheus_data/
并在 docker-compose
中设置服务如下:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus/:/etc/prometheus/
- /prometheus_data:/prometheus_data:rw
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus_data'
- '--storage.tsdb.retention=4d'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
ports:
- 9090:9090
depends_on:
- cadvisor
restart: always
然而服务失败:
prometheus_1 | level=error ts=2019-01-17T09:35:09.200050622Z caller=main.go:579 err="Opening storage failed open DB in /prometheus_data: open /prometheus_data/146791472: permission denied"
prometheus_1 | level=info ts=2019-01-17T09:35:09.20007784Z caller=main.go:581 msg="See you next time!"
服务不是root
用户发起的吗?
为什么会出现上述权限错误?
根据 prometheus
的 Dockerfile
,USER
设置为 nobody
。
因此服务无法访问上述目录是有道理的。
所以问题通过执行
解决了chgrp -R nogroup /prometheus_data