GNU/Linux >> Tutoriels Linux >  >> Linux

Exécution de docker sur Ubuntu :le volume hôte monté n'est pas accessible en écriture à partir du conteneur

Si votre uid sur l'hôte (id -u ) n'est pas le même que le uid de l'utilisateur dans le conteneur docker (souvent "docker"), vous pouvez avoir ce problème. Vous pouvez essayer :

  1. Rendre les UID identiques entre votre utilisateur et l'utilisateur dans le conteneur docker.
  2. Définir les autorisations de groupe sur le répertoire pour qu'elles soient accessibles en écriture pour un groupe auquel vous et docker appartenez.
  3. Vous pouvez également utiliser l'option nucléaire :

chmod a+rwx -R project-dir/

L'option nucléaire rendra votre git espace de travail sale, ce qui vous ennuiera beaucoup, ce n'est donc pas la meilleure solution à long terme. Ça arrête le saignement quand même.

Pour mieux comprendre le problème, vous pourriez trouver ces éléments utiles :

  1. https://github.com/docker/docker/issues/7906
  2. https://github.com/docker/docker/issues/7198

Nouvelle réponse :

Cette question semble avoir beaucoup de trafic et il existe maintenant une meilleure solution - fixuid, comme son nom l'indique, c'est un exécutable magique pour changer l'uid et le gid de l'utilisateur du conteneur au démarrage du conteneur (en utilisant -u quelqu'un:quelqu'un).

Pour une explication plus détaillée, voir :https://boxboat.com/2017/07/25/fixuid-change-docker-container-uid-gid/

Ancienne réponse :

À partir de la version 1.7 de Docker, vous avez la possibilité de monter un répertoire hôte avec des autorisations sur un conteneur à l'aide des drapeaux :Z ou :z comme suit :

docker run -v ./api:/usr/src/app:Z
  • :z - ajoutera des autorisations à tous les conteneurs en utilisant l'étiquette 'svirt_sandbox_file_t'
  •  : Z - ajoutera des autorisations uniquement à l'étiquette de conteneur actuelle

Depuis docker-compose v1.4.0, vous pouvez l'utiliser dans docker compose comme ceci :

volumes:
   - ./api:/usr/src/app:Z

Bien que je doive ajouter que j'ai encore quelques problèmes avec cela (voir Ajouter des autorisations au répertoire hôte avec docker-compose).

Références :

L'utilisation de volumes avec Docker peut causer des problèmes avec SELinux - http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/

Guide de l'utilisateur Docker -https://docs.docker.com/engine/userguide/dockervolumes/#volume-labels

Notes de version de Docker-compose pour la v1.4.0 - https://github.com/docker/compose/releases/tag/1.4.0


Linux
  1. Comment créer une image personnalisée à partir d'un conteneur Docker

  2. Comment accéder à l'espace de noms réseau du conteneur Docker à partir de l'hôte

  3. Transférer le port hôte vers le conteneur Docker

  4. Que contient une image/un conteneur Docker ?

  5. Impossible d'exposer un volume basé sur un fusible à un conteneur Docker

Mettre à niveau Ubuntu dans Docker de 14.04 à 16.04 à l'aide de Do-release-upgrade ?

Comment obtenir l'adresse IP d'un conteneur Docker à partir de l'hôte

Comment créer une image Docker à partir d'un conteneur en cours d'exécution

Docker ne met pas à jour les modifications dans le répertoire

lsb_release :commande introuvable dans le dernier conteneur Ubuntu Docker

Comment spécifier le nom d'hôte pour le conteneur en cours d'exécution ?