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.
3 Réponses :
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.
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
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
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/...