我正在尝试使用Docker named volume通过NFS卷部署具有持久性数据的Prometheus docker container。我使用Ansible进行部署,所以我将发布Ansible配置,但我已经使用Docker的CLI命令执行了相同的配置,在这种情况下也会出现问题。
当我部署容器并检查容器docker logs时,我看到/etc/prometheus被适当地共享并附加到容器。但是,容器存储相关DB和指标的位置/prometheus提供的权限被拒绝。
根据this answer的说法,/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上的权限被拒绝。我已经在一个通用的Ubuntu容器上挂载了名为prometheus_persist的卷进行了测试,它可以很好地挂载,并且我可以在其中touch文件。对如何解决这个问题有什么建议吗?
发布于 2020-11-04 06:24:29
这被证明是NFS压缩的一个问题。在我的例子中,NFS exporter是一个旧的Synology,它不允许设置no_root_squash。但是,将所有用户映射到NFS共享上的admin解决了此问题。
https://stackoverflow.com/questions/64667629
复制相似问题