3 votes

Docker droits d'accès au répertoire de montage

J'ai un conteneur Docker qui exécute une base de données MongoDB. Pour conserver les données de manière persistante, je monte un volume sur le conteneur qui est un volume AWS EBS formaté avec xfs (la recommandation MongoDB).

La commande de démarrage est la suivante :

$ docker run --name MongoDB -p 27017:27017 --volume /data/mongo/db:/data/db --volume /data/mongo/conf:/data/configdb mongo:3.4 --config /data/configdb/mongodb.conf

Mais je reçois toujours les erreurs suivantes :

chown: ne peut pas lire le répertoire '/data/configdb' : Permission refusée
chown: ne peut pas lire le répertoire '/data/db' : Permission refusée

J'ai essayé de nombreuses commandes chmod et chown sur tout le répertoire /data/mongo et ses sous-répertoires jusqu'à ce que j'en arrive à chmod -R 777 /data/mongo mais sans succès. Dans le fichier Dockerfile de mongo, je vois que l'entrypoint chown /data/db et /data/configdb : https://github.com/docker-library/mongo/blob/30d09dbd6343d3cbd1bbea2d6afde49f5d9a9295/3.4/docker-entrypoint.sh.

chown -R mongodb /data/configdb /data/db

Je suis donc bloqué avec ces droits d'accès aux répertoires.


Plus d'infos. Je suis sur AWS, ECS, Centos 7.

 $ docker info
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 3
Server Version: 1.12.5
Storage Driver: devicemapper
 Nom du pool: docker-202:1-86279-pool
 Taille du bloc de pool: 65,54 ko
 Taille de l'appareil de base : 10,74 Go
 Système de fichiers de base: xfs
 Fichier de données : /dev/loop0
 Fichier de métadonnées : /dev/loop1
 Espace de données utilisé : 481,6 Mo
 Espace de données total : 107,4 Go
 Espace de données disponible : 6,486 Go
 Espace de métadonnées utilisé : 1,167 Mo
 Espace de métadonnées total : 2,147 Go
 Espace de métadonnées disponible : 2,146 Go
 Espace minimum libre de la piscine mince : 10,74 Go
 Synchronisation Udev prise en charge : true
 Suppression différée activée : false
 Suppression différée de l'appareil activée : false
 Nombre d'appareils supprimés différés: 0
 Fichier de boucle de données : /var/lib/docker/devicemapper/devicemapper/data
 AVERTISSEMENT : L'utilisation des périphériques en boucle est fortement déconseillée pour un usage en production. Utilisez `--storage-opt dm.thinpooldev` pour spécifier un périphérique de stockage de bloc personnalisé.
 Fichier de boucle de métadonnées : /var/lib/docker/devicemapper/devicemapper/metadata
 Version de la bibliothèque : 1,02,135-RHEL7 (2016-11-16)
Driver de journalisation : journald
Driver de cgroup : systemd
Plugins :
 Volume: local
 Réseau: pont hôte nul superposition
Swarm: inactif
Runtimes: runc docker-runc
Runtime par défaut: docker-runc
Options de sécurité: seccomp selinux
Version du noyau : 3.10.0-514.6.1.el7.x86_64
Système d'exploitation: CentOS Linux 7 (Core)
Type d'OS: linux
Architecture: x86_64
Nombre de crochets Docker : 2
CPUs: 2
Mémoire totale : 14,53 GiB
Nom : ip-172-31-25-123.eu-west-1.compute.internal
ID : 44WV:6KIZ:LHMK:5HDN:S3EC:YEQG:GFZZ:7TIV:6PCT:GPVF:E6IV:24Q5
Répertoire racine de Docker : /var/lib/docker
Mode de débogage (client) : false
Mode de débogage (serveur) : false
Registre: https://index.docker.io/v1/
Registres non sécurisés :
 127.0.0.0/8
Registres : docker.io (sécurisé)

9voto

jmcollin92 Points 192

D'accord, je viens de réaliser que SELinux est activé sur ma boîte Centos7 :

 $ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

Donc je dois simplement ajouter :Z après chaque montage de volume et MongoDB démarre comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X