J'ai procédé comme suit et perdu toutes les données modifiées dans mon conteneur Docker.
docker build -t <name:tag> .
docker run *-p 8080:80* --name <container_name> <name:tag>
docker exec
(importer et traiter certains fichiers, lancer un serveur pour les héberger)Ensuite, j'ai voulu l'exécuter sur un autre port. docker stop
& docker run
ne fonctionne pas. Au lieu j'ai fait
docker stop
docker rm <container_name>
docker run
(mêmes paramètres qu'auparavant)Après le redémarrage, j'ai constaté que les modifications survenues dans le conteneur à 1-3 avaient disparu et que je devais réexécuter l'importation.
Comment est-ce que je fais ceci correctement la prochaine fois?
ce que vous devez faire, c'est créer l'image à partir du conteneur que vous venez d'arrêter après avoir apporté des modifications. Parce que votre ancienne commande utilise toujours l'ancienne image qui n'a pas de nouvelles modifications (vous avez apporté des modifications dans le conteneur que vous venez d'arrêter et non dans l'image)
docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
docker commit -a me new_nginx myrepo/nginx:latest
alors vous pouvez commencer le conteneur avec la nouvelle image que vous venez de construire
mais si vous ne voulez pas créer d'image avec les modifications que vous avez apportées (comme vous ne devez pas mettre la configuration contenant le mot de passe dans l'image), vous pouvez utiliser le montage en volume
docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
Cette commande monte le répertoire de l'hôte,/src/webapp, dans le conteneur situé dans/webapp. Si le chemin/webapp existe déjà dans l’image du conteneur, le montage/src/webapp se superpose mais ne supprime pas le contenu préexistant. Une fois le montage supprimé, le contenu est à nouveau accessible. Ceci est cohérent avec le comportement attendu de la commande mount.
Chaque fois que vous faites un docker run
, il créera un nouveau conteneur en fonction de votre image. Et une fois qu'un conteneur est démarré, il y a très peu de choses que docker vous permet de changer avec le docker update
. Au lieu de cela, vous devez donc conserver vos données dans un volume externe devant persister entre les instances d'un conteneur. Par exemple.
docker run -p 8080:80 -v app-data:/data --name <container_name> <name:tag>
Le nom du volume (app-data) et le point de montage dans le conteneur (/ data) peuvent être modifiés pour vos propres besoins. Ensuite, lorsque vous détruisez et redémarrez un nouveau conteneur, vous pouvez monter le même volume dans le nouveau conteneur.