2
votes

Comment monter un répertoire hôte dans un conteneur Docker en cours d'exécution

Je souhaite monter ma clé USB dans une instance de docker en cours d'exécution pour une sauvegarde manuelle de certains fichiers.

Je connais la fonctionnalité -v de docker run , mais cela crée un nouveau conteneur. Remarque: c'est un conteneur nextcloudpi.


2 commentaires

pourquoi voter contre? J'ai recherché stackoverflow et Internet pour une réponse. Maintenant, tout le monde peut le rechercher sur Google :)


Duplicata de stackoverflow.com/questions/28302178/...


3 Réponses :


1
votes

Vous ne pouvez modifier qu'un ensemble très limité d'options de conteneur après un conteneur démarre. Les options telles que les variables d'environnement et les montages de conteneurs ne peuvent être définies que lors de la exécution du docker ou de la docker create initiale. Si vous souhaitez les modifier, vous devez arrêter et supprimer votre conteneur existant et en créer un nouveau avec la nouvelle option de montage.

S'il y a des données que vous pensez devoir conserver ou sauvegarder, elles devraient de toute façon vivre dans une sorte de montage de volume. Supprimez et redémarrez votre conteneur et utilisez une option -v pour monter un volume sur lequel les données sont conservées. La documentation Docker contient un exemple utilisant des volumes nommés avec des sauvegarder et restaurer les conteneurs ; ou vous pouvez y utiliser directement un répertoire hôte et votre solution de sauvegarde normale. (Supprimer et recréer un conteneur comme je l'ai suggéré dans le premier paragraphe est extrêmement routinier, et cela ne devrait pas impliquer d'étapes explicites de «sauvegarde» et de «restauration».)

Si vous disposez actuellement de données que vous ne pouvez pas vous permettre de perdre, vous pouvez docker cp hors du conteneur avant de configurer un schéma de stockage plus robuste.


0 commentaires

0
votes

Je sais que la question date de mai, mais pour les futurs chercheurs:

Créez un point de montage sur le système de fichiers hôte:

docker run --name mynextcloudpi -it --mount type=bind,source=/mnt/usb-drive,target=/mnt/disk,bind-propagation=shared nextcloudpi

Exécutez le conteneur Docker en utilisant - mount et définissez l'option "bind propagation" sur "shared":

sudo mkdir /mnt/usb-drive

Vous pouvez maintenant monter votre clé USB sur le / mnt / usb-drive et il sera monté à l'emplacement / mnt / disk à l'intérieur du conteneur en cours d'exécution.

Par exemple: sudo mount / dev / sda1 / mnt / usb-drive

Modifiez bien sûr le / dev / sda1.

Plus d'informations sur la propagation de liaison: https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation


0 commentaires

1
votes

Comme David Maze l'a mentionné, il est presque impossible de modifier l'emplacement du volume d'un conteneur existant en utilisant les commandes docker normales.

J'ai trouvé une méthode alternative qui fonctionne pour moi. L'idée principale est de convertir le conteneur existant en une nouvelle image Docker et d'initialiser un nouveau conteneur Docker par-dessus . Hope fonctionne pour vous aussi.

// Create a new image from the container
docker commit CONTAINERID NEWIMAGENAME

// Create a new container on the top of the new image
docker run -v HOSTLOCATION:CONTAINERLOCATION NEWIMAGENAME


0 commentaires