La duplication de docker conteneur pour le débogage
J'ai l'exécution d'un conteneur docker. J'ai fait quelques travaux utiles à l'exécution de conteneur docker. Je l'ai fait ces œuvres ne faisant pas partie de dockerfile, je l'ai fait à l'intérieur du conteneur.[Par exemple: j'ai installé ping à l'intérieur du conteneur, pas de menu fixe de fichier]
Maintenant, je suis coincé à un endroit. Je ne suis pas sûr si je de débogage dans le même conteneur, je risque de perdre la chose que j'ai fait jusqu'à présent à l'intérieur de ce conteneur.
Je voudrais donc créer une copie de toutes les choses disponibles dans cette course conteneur[comme je ne veux pas construire un conteneur d'image et de répéter toutes les suucessful étapes accomplis dans l'exécution de conteneur, puis commencer mon debuggging. Je ne veux pas ré-installer ping dans mon second récipient].
Totalement, Comment puis-je dupliquer un conteneur? Si non quelles sont toutes les possibilités?
Vous devez vous connecter pour publier un commentaire.
Créer une image de base et de l'exécuter
Apporter les changements nécessaires
S'engager avec un nouveau nom
Maintenant, si vous ouvrez new_image en exécutant
Vous pouvez voir
ping
est installé en elle.Ouvrir base_image et il n'y a pas de
ping
installé en elle.Espère que ça répond à votre question.
docker commit
; le reste est là pour recréer la situation de l'OP fini dans.Si vous souhaitez enregistrer vos modifications, vous pouvez utiliser
docker commit
, voir la doc http://docs.docker.com/reference/commandline/cli/#commit et vous pouvez également enregistrer un conteneur, http://docs.docker.com/reference/commandline/cli/#saveactuellement brisé à nouveau
ci-dessous ne fonctionne qu'avec la version de partout Déc 20 '17. Je n'ai pas encore regardé cette après Jan 18.
docker commit
est très bien pour enregistrer les modifications du fichier dans une nouvelle image, mais il ne sera pas conserver les modifications dans la mémoire, des processus ouverts, etc. Contrairement à l'opinion populaire, ce dernier est faisable avecdocker checkpoint
. La Documentation et exemple.Remarque: pour l'instant, la
--checkpoint-dir
option est cassé: question, pull. C'est pourquoi une solution de contournement commecheckpoint_dir
(voir le code) est nécessaire ici. Cette réponse devrait probablement être mis à jour dans quelques semaines.Il est pas possible de point de contrôle d'un ATS. Cette pourrait changer bientôt. Cependant, vous pouvez joindre un nouveau ATS après le processus de restauration à l'aide de exec.
Vous besoin d'avoir installé criu. Après, tout d'abord,
puis
Maintenant dans le terminal, tapez
ps -e
et vous verrez le processus qui a commencé dans lessleeper
conteneur et continue à leclone
.checkpoint
fait un plan complet du conteneur à disque dur, exchangable entre les machines. Cette fonctionnalité utilise criu et est expérimental. Criu ne peut pas créer un modèle de X11 applications nativement.pause
en revanche, seulement gèle le conteneur à l'interne. Il n'y a rien que vous pouvez faire avec une pause conteneur autre que reprendre il.De docker mise en œuvre de la version 1.0.1 (client /Serveur de l'API 1.12), il est seulement un soutien pour mettre en pause/reprendre l'exploitation.
Mais aussi loin que instantanés de processus (en commet + push), celles-ci ne fonctionnent pas (pas de prise en charge, bien que je n'ai pas vérifié la documentation)
En résumé,
1) la Préservation de l'état des processus en cours d'exécution n'est pas possible!
2) Toutes les modifications apportées au système de fichiers de stockage persistant) peut être enregistré (et peut être commise + poussé à référentiel).
Si vous avez un conteneur
my-cont
et que vous souhaitez déboguer, il n'est pas nécessaire d'installer les outils de débogage à l'intérieur. Ce que vous pouvez faire est d'utiliser un autre récipient à partir d'une version de débogage de l'image par exemplexyz_docker_img
puis laissez partage les mêmes espaces de noms avecmy-cont
récipient avec fonctionnalités supplémentaires dont vous avez besoin pour le débogage.