docker - 如何在 Docker 容器中设置附加卷的权限?
问题描述
我正在尝试使用名为 volume 的 Docker通过 NFS 卷部署具有持久数据的Prometheus docker 容器。我正在使用 Ansible 进行部署,因此我将发布 Ansible 配置,但我已经使用 Docker 的 CLI 命令执行了相同的操作,并且在这种情况下也会出现问题。
当我部署容器并查看容器docker logs
时,我看到它/etc/prometheus
已正确共享并附加到容器。但是,/prometheus
容器存储相关 DB 和指标的位置会拒绝授予权限。
根据这个答案,/prometheus
需要对chown
任何人进行编辑。这似乎不会在启动时在容器内发生。
这是我的 Ansible 角色创建的卷:
- name: "Creates named docker volume"
docker_volume:
volume_name: prometheus_persist
state: present
driver_options:
type: nfs
o: "addr={{ nfs_server }},rw,nolock"
device: ":{{ prometheus_nfs_path }}"
这相当于这个 Docker CLI 命令:
docker volume create -d local -o type=nfs -o o=addr={{ nfs_server }},rw -o device=:{{ prometheus_nfs_path }} prometheus_persist
这是我的容器部署节
- name: "Deploy prometheus container"
docker_container:
name: prometheus
# hostname: prometheus
image: prom/prometheus
restart_policy: always
state: started
ports: 9090:9090
user: ansible:docker
volumes:
- "{{ prometheus_config_path }}:/etc/prometheus"
mounts:
- source: prometheus_persist
target: /prometheus
read_only: no
type: volume
comparisons:
env: strict
这相当于这个 Docker CLI 命令:
docker run -v prometheus_persist:/prometheus -v "{{ prometheus_config_path }}:/etc/prometheus" -p 9090:9090 --name prometheus prom/prometheus
同样,部署时的容器日志表明权限被拒绝/prometheus
。我已经通过prometheus_persist
在通用 Ubuntu 容器上安装命名卷进行了测试,它安装得很好,我可以touch
在其中文件。关于如何解决这个问题的任何建议?
解决方案
事实证明,这是 NFS 压缩的问题。就我而言,NFS 导出器是旧的 Synology,不允许no_root_squash
设置。但是,将所有用户映射到 NFS 共享上的管理员解决了该问题。
推荐阅读
- fonts - 在 NextJS 中导入字体
- php - 如何检查文件是否被删除 google drive api
- vue.js - 在 2 个 Vuejs 组件中调用 2 个 axios 请求并使用 Vuex 共享数据
- kdb - 深度索引字典,两种情况
- python - 使用 import_module 从不同目录导入模块
- arrays - 具有数组公式的列中的可编辑单元格
- angular - 如何将 cdk 拖动项关联到 cdk 下拉列表列表中?
- atlassian-sourcetree - 记录所有提交的文件
- php - 扫描唯一二维码后,手机浏览器缓存之前扫描的二维码网页
- python - Python 3.6.4 脚本在调试模式下工作,但在终端上运行时返回错误