En essayant de corriger les erreurs et de déboguer les problèmes avec mon application qui est répartie sur plusieurs conteneurs, j'édite fréquemment des fichiers dans des conteneurs:
soit je suis totalement paresseux et installe nano et édite directement dans le conteneur ou
Je docker cp le fichier hors du conteneur, le modifier, le recopier et redémarrer le conteneur
Ce sont des étapes intermédiaires avant d'arriver à un nouveau contenu pour la construction de conteneurs, ce qui prend beaucoup plus de temps que de faire ce qui précède (ce qui, bien sûr, n'est que intermédiaire / bidouillage).
Maintenant, je casse fréquemment le programme de démarrage du conteneur, qui dans les cas de rupture est soit un script de nœud ou un script de serveur Web python, les deux échouent généralement à cause d'erreurs de syntaxe.
Existe-t-il un moyen de sauvegarder ces conteneurs? Puisqu'ils ne démarrent pas, je ne peux pas les exécuter, et ils me sont donc perdus. Je vais ensuite sur la route rm / rmi / build / run après avoir corrigé le fichier incriminé dans l'entrée de construction.
Comment puis-je modifier des fichiers dans un conteneur arrêté, les cp ou démarrer un shell dans un conteneur arrêté - tout ce qui me permet de réparer ce conteneur?
(Cela ressemble un peu à travailler sur un ordinateur distant et à interrompre la configuration du réseau - la connexion est perdue "pour toujours" de cette façon et il faut utiliser une solution de secours, si elle existe.)
Comment modifier les fichiers de conteneur Docker à partir de l'hôte? semble pertinent mais est obsolète.
docker cp
docker commit
commande pour casser une nouvelle image.name=$(docker commit); docker run -it $name /bin/sh
fera ce que vous voulez.Réponses:
J'ai eu un problème avec un conteneur qui ne démarre pas en raison d'un mauvais changement de configuration que j'ai effectué. J'ai pu copier le fichier hors du conteneur arrêté et le modifier. quelque chose comme:
(corrigez le fichier)
la source
UpperDir
vous obtenezdocker container inspect
- vous devrez expérimenter pour voir comment le système de superposition représente les fichiers dans la structure sous-jacente qui ont été supprimés dans la couche supérieure.Répondre à ma propre question ... espérant toujours une meilleure réponse d'une personne plus compétente !!
Il y a 2 possibilités.
1) Modification du système de fichiers directement sur l'hôte . Ceci est quelque peu dangereux et risque de casser complètement le conteneur, éventuellement d'autres données en fonction de ce qui ne va pas.
2) Changer le script de démarrage pour quelque chose qui n'échoue jamais comme démarrer un bash, faire les correctifs / modifications, puis changer à nouveau le programme de démarrage pour celui souhaité (comme le nœud ou ce qu'il était auparavant).
Plus de détails:
1) Utilisation
pour trouver les conteneurs en cours d'exécution ou
pour trouver tous les conteneurs (y compris ceux arrêtés) et
recherchez le "Id", l'une des premières valeurs.
C'est la partie qui contient les détails de l'implémentation et qui peut changer, sachez que vous risquez de perdre votre conteneur de cette façon.
Aller à
et là, vous trouverez tous les fichiers qui sont modifiés vers l'image sur laquelle le conteneur est basé. Vous pouvez écraser des fichiers, ajouter ou modifier des fichiers.
Encore une fois, je ne recommanderais pas cela.
2) Comme décrit sur https://stackoverflow.com/a/32353134/586754, vous pouvez trouver la configuration json config.json à un chemin comme
Là, vous pouvez changer les arguments par exemple de "nodejs app.js" à "/ bin / bash". Maintenant, redémarrez le service docker et démarrez le conteneur (vous devriez voir qu'il démarre maintenant correctement). Tu devrais utiliser
pour s'assurer qu'il ne s'arrête pas tout de suite. Vous pouvez maintenant travailler avec le conteneur et / ou attacher ultérieurement avec
docker exec -ti (containername) /bin/bash
En outre, docker cp est plutôt utile pour copier des fichiers qui ont été modifiés en dehors du conteneur.
De plus, on ne devrait revenir à ces mesures que si le conteneur est plus ou moins «perdu» de toute façon, donc tout changement constituerait une amélioration.
la source
config.json
fichiers à chaque fois que je lesVous pouvez modifier directement le système de fichiers du conteneur, mais je ne sais pas si c'est une bonne idée. Vous devez d'abord trouver le chemin du répertoire qui est utilisé comme racine d'exécution pour le conteneur. Courez
docker container inspect id/name
. Recherchez la cléUpperDir
dans la sortie JSON.C'est votre annuaire.
la source
Si vous essayez de redémarrer un conteneur arrêté et que vous devez modifier le conteneur en raison d'une mauvaise configuration mais que le conteneur ne démarre pas, vous pouvez faire ce qui suit qui fonctionne en utilisant la commande "docker cp" (similaire à la suggestion précédente). Cette procédure vous permet de supprimer des fichiers et d'effectuer toute autre modification nécessaire. Avec de la chance, vous pouvez ignorer de nombreuses étapes ci-dessous.
Modifier ou créer un nouveau script de point d'entrée par exemple
#!/bin/bash tail -f /etc/hosts
la source