J'ai un conteneur Docker déjà en cours d'exécution. J'ai apporté quelques modifications à la configuration, disons avoir ajouté des informations sur l'hôte dans/etc/hosts à l'intérieur du conteneur. Comment enregistrer les modifications afin que, lors de la prochaine ouverture d’un shell interactif dans le conteneur, je n’ai plus à refaire les mêmes opérations? Pour l'instant, j'ai créé un mini-script en tant que addhosts.sh, comme indiqué ci-dessous, dans le conteneur et je dois l'exécuter à chaque fois.
echo "1.2.3.4 server1.example.com gluster1" >> /etc/hosts
echo "5.6.7.8 server2.example.com gluster2" >> /etc/hosts
C'est l'un des cas. De même, j'ai besoin que toute ma configuration soit intacte. S'il vous plaît, ne suggérez pas de dockerfile car je ne crée pas d'image, je vais juste entrer dans le conteneur.
Vous pouvez valider les modifications que vous avez apportées en:
Référence de commande courte:
docker commit <container id or name> <repository name>/<your image name>:<tage aka version>
Exemple:
docker commit c3f279d17e0a svendowideit/testimage:version3
Référence complète:
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith <[email protected]>")
-c, --change value Apply Dockerfile instruction to the created image (default [])
--help Print usage
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
Ensuite, vous pouvez utiliser docker images
pour afficher votre nouvelle image après la validation.
Pour exécuter un conteneur à partir de votre nouvelle image:
docker run -d svendowideit/testimage:version3 <optional startup command>
Une autre façon serait de créer votre propre image via: dockerfile
, je la mets simplement ici pour que nous puissions aider les autres.
En supposant que vous ne souhaitiez pas enregistrer les modifications dans une nouvelle image:
docker exec -it container_id echo "1.2.3.4 server1.example.com gluster1" >> /etc/hosts
docker exec -it container_id echo "5.6.7.8 server2.example.com gluster2" >> /etc/hosts
Cela permettrait de se connecter au conteneur, d'exécuter la commande et de quitter sans tuer le conteneur.
Notez la différence entre les éléments suivants:
docker exec -it container_id ... = does not kill the container.
docker run -it container_id ...= kills the container
Utilisez docker commit
pour prendre un instantané de votre conteneur.
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith <[email protected]>")
-c, --change value Apply Dockerfile instruction to the created image (default [])
--help Print usage
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
Example: docker commit c3f279d17e0a svendowideit/testimage:version3
Regardez https://docs.docker.com/engine/reference/commandline/commit/
Pour exécuter un instantané d'un conteneur de menu fixe, ajoutez la version à exécuter. Comme pour l'exempledocker run svendowideit/testimage:version3