Autorisation refusée sur /etc/prometheus/prometheus.yml; impossible de déployer prom / prometheus
J'utilise un montage NFS pour fournir le /etc/prometheus/prometheus.ymlfichier de configuration (par défaut) à l'image docker prom / prometheus via Ansible. Lorsque le conteneur est déployé, j'obtiens l'erreur suivante dans les journaux du conteneur et le conteneur redémarre après quelques secondes.
level=error ts=2020-10-28T16:01:04.432Z caller=main.go:290 msg="Error loading config (--config.file=/etc/prometheus/prometheus.yml)" err="open /etc/prometheus/prometheus.yml: permission denied"
Je peux parcourir le système de fichiers monté sur mon hôte docker (un Raspberry Pi 4), toucher des fichiers et lire en prometheus.ymltant qu'utilisateur qui lance le conteneur.
Vous trouverez ci-dessous les tâches pertinentes de mon playbook, et le problème est le même lors du déploiement du conteneur à partir de la CLI sans le playbook avec le système de fichiers distant monté sur /mnt/prometheus, et transmis au conteneur en tant que volume à/etc/prometheus
docker run -p 9090:9090 -v /mnt/prometheus:/etc/prometheus prom/prometheus
prometheus / tasks / main.yml ( become: yesest défini dans le playbook qui appelle ce rôle)
- name: "Create mountpoint"
file:
path: "{{ prometheus_mount_path }}"
state: directory
mode: 0777
owner: root
group: users
- name: "Mount nfs drive for prometheus filesystem"
mount:
path: "{{ prometheus_mount_path }}"
src: "{{ nfs_server }}:{{ prometheus_nfs_path }}"
state: mounted
fstype: nfs
- name: "Create prometheus.yml in mountpoint from template"
template:
src: prometheus.yml.j2
dest: "{{ prometheus_mount_path }}/prometheus.yml"
- name: "Deploy prometheus container"
docker_container:
name: prometheus
image: prom/prometheus:latest
restart_policy: always
state: started
network_mode: host
hostname: prometheus
# exposed_ports: 9090
published_ports: 9090:9090
user: 995:1002
mounts:
volumes:
- "{{ prometheus_mount_path }}:/etc/prometheus"
comparisons:
'*': ignore
env: strict
Une idée de ce qui causerait ou comment résoudre le permission deniedproblème du conteneur?
Mise à jour: j'ai testé en partageant un répertoire sur l'hôte docker avec le conteneur. Cela a été partagé avec succès. Indique un problème NFS, mais j'ai du mal à le comprendre.
Réponses
J'ai eu un problème similaire, mais pas avec NFS mais avec le montage d'un répertoire simple. Pour moi, la réponse à cette question l'a corrigé: docker-compose: erreurs d'autorisation de répertoire sur le montage de liaison .
Apparemment, Prometheus Docker utilise l'utilisateur nobody, définissant les autorisations de dossier pour nogroupfonctionner pour moi:
chgrp -R nogroup /mnt/prometheus
Donc, dans votre playbook Ansible:
- name: fix permissions for prometheus mnt folder
file:
path: '/mnt/prometheus'
group: nogroup
recurse: yes
become: yes
Dans mon cas particulier, j'ai trouvé que le problème était une fonction de l'écrasement NFS. Mon exportateur NFS - un ancien Synology NAS - ne m'a pas permis de désactiver complètement l'écrasement. Si c'était le cas, la réponse de @ nehtor.t aurait probablement aidé. Au lieu de cela, j'ai dû utiliser le paramètre «mapper tous les utilisateurs à l'administrateur» dans l'interface graphique NFS, ce qui permettait aux connexions les autorisations appropriées sur le partage NFS de manière appropriée chown.