GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi le conteneur Docker invite-t-il l'autorisation refusée ?

J'ai eu un problème similaire lors du partage d'un point de montage nfs en tant que volume à l'aide de docker-compose. J'ai pu résoudre le problème avec :

    docker-compose up --force-recreate

Même si vous avez trouvé le problème, cela peut aider quelqu'un d'autre.


Une autorisation refusée dans un conteneur pour un répertoire partagé peut être due au fait que ce répertoire partagé est stocké sur un appareil. Par défaut, les conteneurs ne peuvent accéder à aucun appareil. Ajout de l'option $docker run --privileged permet au conteneur d'accéder à tous périphériques et effectue des appels Kernel. Ceci n'est pas considéré comme sécurisé.

Une façon plus propre de partager un appareil consiste à utiliser l'option docker run --device=/dev/sdb (si /dev/sdb est l'appareil que vous souhaitez partager).

À partir de la page de manuel :

  --device=[]
      Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm)

  --privileged=true|false
      Give extended privileges to this container. The default is false.

      By default, Docker containers are “unprivileged” (=false) and cannot, for example, run a Docker daemon inside the Docker container. This is because by default  a  container is not allowed to access any devices. A “privileged” container is given access to all devices.

      When  the  operator  executes  docker run --privileged, Docker will enable access to all devices on the host as well as set some configuration in AppArmor to allow the container nearly all the same access to the host as processes running outside of a container on the host.

J'ai reçu une réponse d'un commentaire sous :Pourquoi le conteneur Docker invite-t-il l'autorisation refusée ?

man docker-run donne la bonne réponse :

Les systèmes d'étiquetage comme SELinux exigent que les étiquettes appropriées soient placées sur le contenu du volume monté dans un conteneur. Sans étiquette, le système de sécurité peut empêcher les processus exécutés à l'intérieur du conteneur d'utiliser le contenu. Par défaut, Docker ne modifie pas les étiquettes définies par le système d'exploitation.

Pour modifier une étiquette dans le contexte du conteneur, vous pouvez ajouter l'un des deux suffixes :z ou :Z au montage du volume. Ces suffixes indiquent à Docker de réétiqueter les objets de fichier sur les volumes partagés. L'option z indique à Docker que deux conteneurs partagent le contenu du volume. Par conséquent, Docker étiquette le contenu avec une étiquette de contenu partagé. Les étiquettes de volume partagé permettent à tous les conteneurs de lire/écrire du contenu. L'option Z indique à Docker d'étiqueter le contenu avec une étiquette privée non partagée. Seul le conteneur actuel peut utiliser un volume privé.

Par exemple :

  docker run -it --name oracle_install -v /root/database:/tmp/install/database:z ...

Une autre raison est une non-concordance avec l'UID/GID. Cela se traduit souvent par la possibilité de modifier un montage en tant que root mais pas en tant qu'utilisateur de conteneurs

Vous pouvez définir l'UID, donc pour un conteneur ubuntu fonctionnant sous ubuntu, vous devrez peut-être ajouter :uid=1000 (vérifier avec id -u ) ou définissez l'UID localement en fonction de votre cas d'utilisation.

uid=valeur et gid=valeur

Définissez le propriétaire et le groupe des fichiers dans le système de fichiers (par défaut :uid=gid=0)

Il y a un bon blog à ce sujet ici avec cet exemple tmpfs

docker run \
       --rm \
       --read-only \
       --tmpfs=/var/run/prosody:uid=100 \
       -it learning/tmpfs

http://www.dendeer.com/post/docker-tmpfs/


Linux
  1. Pourquoi l'utilisateur racine a-t-il besoin d'une autorisation Sudo ?

  2. Pourquoi `exit &` ne fonctionne pas ?

  3. Une introduction à Docker

  4. erreur de commande 'docker images' - "Autorisation refusée"

  5. autorisation docker.sock refusée

Qu'est-ce que Docker ? Comment ça marche?

Dépannage des problèmes de refus d'autorisation de Docker

Comment se connecter en SSH à un conteneur Docker

Pourquoi tout le monde utilise Docker ?

Pourquoi Deis et qu'est-ce que c'est ?

Comment gérer les conteneurs Docker