9
votes

Comment monter un répertoire dans le conteneur Docker à l'hôte?

Il est assez facile de monter un répertoire hôte dans le conteneur Docker.

Mais j'ai besoin de l'inverse.

J'utilise un conteneur Docker comme environnement de développement pour développer des plug-ins WordPress. Ce conteneur Docker contient tout pour exécuter WordPress (MySQL, Apache, PHP et WordPress). Je mont mon dossier de plugin src de l'hôte dans le conteneur Docker, de sorte que je puisse tester mon plugin pendant le développement.

Pour le débogage, il serait utile que mon IDE fonctionne sur l'hôte ait lu l'accès aux fichiers WordPress dans le conteneur Docker.

J'ai trouvé deux façons de résoudre le problème, mais les deux semblent vraiment hacky.

  1. Ajout d'un volume de données au conteneur Docker, avec le chemin d'accès aux fichiers WordPress

    Docker Exécuter ... -V / USR / Share / WordPress / ...

    Docker ajoute ce répertoire au chemin du chemin de l'hôte / Var / Lib / Docker / VFS / Dir ... Mais vous devez rechercher le chemin d'accès réel avec Docker Inspect et vous avez besoin de droits d'accès racine pour voir les fichiers. < / p>

  2. Montage d'un répertoire hôte au conteneur Docker et copie des fichiers WordPress dans le conteneur vers ce répertoire hôte monté. Un lien symbolique ne semble pas fonctionner.

    Y a-t-il une meilleure façon de le faire? Sans copier des fichiers ou changer les droits d'accès?

    Merci!


0 commentaires

5 Réponses :


-1
votes

Pourquoi pas seulement faire: Docker Exécuter ... -V / USR / Share / WordPress /: / USR / Partager / WordPress . Maintenant, votre local / USR / Share / WordPress / est mappé sur / USR / Share / WordPress dans le conteneur Docker et les deux ont les mêmes fichiers. Vous pouvez également monter ailleurs dans le conteneur de cette façon. La syntaxe est host_path: conteneur_path, donc si vous vouliez monter / usr / partager / wordpress de votre hôte / My / My / New / Chemin sur le conteneur, vous venez de faire: Docker Exécuter ... -V / USR / Share / WordPress /: / Mon / Nouveau / Chemin .


2 commentaires

Le local / usr / wordpress remplacera le contenu de / usr / partager / wordpress dans le conteneur. Le dossier local est vide et seul le dossier du conteneur contient les fichiers WordPress. Donc, les fichiers WordPress dans le conteneur seront remplacés par le dossier local vide. J'ai besoin de l'inverse.


@Kaihofsttertter Vous pouvez probablement travailler cela autour de vous en gardant vos fichiers WordPress d'origine un autre endroit que / usr / share / wordpress et copiez-les dans le démarrage du conteneur (généralement effectué par le script d'entréePoint). De cette façon, vous aurez les fichiers propagés à l'annuaire mappé hôte.



0
votes

Vous pouvez partager les fichiers à l'aide de SMB avec SVendowideits samba conteneur comme ceci :

docker run --rm -v $(which docker):/docker -v /var/run/docker.sock:/docker.sock svendowideit/samba <container name>


0 commentaires

1
votes

Copier les fichiers WordPress vers le dossier monté était la solution.

Je déplace les fichiers dans le conteneur dans le dossier d'origine dans le dossier monté et utilisez des liens symboliques pour les relier au dossier d'origine.

La partie importante est que le conteneur peut suivre des liens symboliques dans le conteneur et mais l'hôte ne peut pas. Il suffit donc d'utiliser des liens symboliques à partir du dossier d'origine dans le dossier monté ne fonctionne pas, car l'hôte ne peut pas suivre des liens symboliques dans le conteneur!


1 commentaires

Ne pouvons-nous pas aller au niveau de fichier de fichiers I.e. / var / lib / docker et créer un lien symbolique dans votre dossier hôte dans le dossier du conteneur - tant que vous pouvez le trouver?



0
votes

Il est possible de faire si vous utilisez volume em> au lieu de chemin de fichier de fichiers. Il est créé pour vous automatiquement, si cela n'existe pas déjà.

docker run -it --rm -v usr_share_wordpress:/usr/share/wordpress busybox sh


0 commentaires

0
votes

J'ai eu un besoin similaire d'exposition des fichiers de conteneur à l'hôte. Il y a un Ouvrir le problème à ce sujet à ce jour. L'un des moyens de travail mentionnés, en utilisant liets code>, est assez propre; Il fonctionne lorsque le conteneur est opérationnel:

container_root=$(docker inspect --format {{.State.Pid}} "$container_name")/root
sudo bindfs --map=root/"$USER" "$container_root/$app_folder" "$host_folder"


0 commentaires