Autorisation refusée sur /etc/prometheus/prometheus.yml; impossible de déployer prom / prometheus

Oct 29 2020

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

nehtor.t Nov 10 2020 at 20:47

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
JehanAlvani Nov 10 2020 at 22:56

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.