J'ai réussi à décortiquer un conteneur Docker en utilisant:
docker exec -i -t 69f1711a205e bash
Maintenant, je dois modifier le fichier et je n'ai aucun éditeur à l'intérieur:
root@69f1711a205e:/# nano
bash: nano: command not found
root@69f1711a205e:/# pico
bash: pico: command not found
root@69f1711a205e:/# vi
bash: vi: command not found
root@69f1711a205e:/# vim
bash: vim: command not found
root@69f1711a205e:/# emacs
bash: emacs: command not found
root@69f1711a205e:/#
Comment éditer des fichiers?
Dockerfile
commande install include-apt-get et générer votre propre conteneur? Le conteneur Docker est conçu comme ça, pas à votre façon.Réponses:
Comme dans les commentaires, il n'y a pas d'éditeur par défaut - étrange - la
$EDITOR
variable d'environnement est vide. Vous pouvez vous connecter à un conteneur avec:Et courir:
Ou utilisez le Dockerfile suivant:
Les images Docker sont livrées découpées au strict minimum - donc aucun éditeur n'est installé avec le conteneur expédié. C'est pourquoi il est nécessaire de l'installer manuellement.
ÉDITER
Je vous encourage également à lire mon article sur le sujet.
la source
docker exec -u 0 -it container_name bash
.vim-tiny
place, probablement./var/lib/docker/
apt-get
ne fonctionnait pas en raison d'un problème d'autorisation à l'intérieur du conteneur, j'ai donc essayésed -i 's/texttobechanged/textwanted/g' filename
. Ça a marché pour moi.Si vous ne voulez pas ajouter un éditeur juste pour faire quelques petites modifications (par exemple, changer la configuration de Tomcat), vous pouvez simplement utiliser:
qui le copie sur votre machine locale (dans votre répertoire actuel). Modifiez ensuite le fichier localement à l'aide de votre éditeur préféré, puis effectuez une
pour remplacer l'ancien fichier.
la source
docker cp <container>:C:\inetpub\wwwroot\Web.config .
etdocker cp Web.config <container>:C:\inetpub\wwwroot\Web.config
.docker exec -u 0 -it mycontainer bash
) puis en exécutant unechown
commande.Vous pouvez l'utiliser
cat
s'il est installé, ce qui sera probablement le cas s'il ne s'agit pas d'un conteneur nu / brut. Cela fonctionne dans un pincement, et ok quand copier + coller dans un éditeur approprié localement.cat
affichera chaque ligne à la réception d'une nouvelle ligne. Assurez-vous d'ajouter une nouvelle ligne pour cette dernière ligne. ctrl-c envoie unSIGINT
pour que cat se termine correctement. À partir des commentaires, vous voyez que vous pouvez également appuyer sur ctrl-d pour indiquer la fin du fichier ("plus aucune entrée à venir").Une autre option est quelque chose comme
infilter
qui injecte un processus dans l'espace de noms du conteneur avec de la magie ptrace: https://github.com/yadutaf/infilterla source
ctrl+D
est mieux quectrl+C
.ctrl+D
envoie unEOF
. Vous n'avez pas besoin d'ajouter une nouvelle ligne supplémentaire à la fin. Avecctrl+C
, si vous oubliez d'ajouter la nouvelle ligne, vous perdrez la dernière ligne!Pour garder vos images Docker petites, n'installez pas d'éditeurs inutiles. Vous pouvez modifier les fichiers via SSH de l'hôte Docker vers le conteneur:
la source
vim scp://
vim.wikia . De plus, pour obtenir l'adresse IP de votre conteneur, vous pouvez utilisersudo docker inspect <container_id> | grep "IPAddress"
vim scp://[email protected]//data/gitea/conf/app.ini
ainsi quevim scp://[email protected]//data/gitea/conf/app.ini
et les deux créent simplement un nouveau fichier vierge.ssh
sur votre conteneur Docker . Voir blog.softwaremill.com/… . Mais vous ne voulez généralement pas installerssh
dans votre conteneur.Parfois, vous devez d'abord exécuter le conteneur avec
root
:Puis dans le conteneur, pour installer Vim ou autre chose:
la source
J'utilise "docker run" (pas "docker exec"), et je suis dans une zone restreinte où nous ne pouvons pas installer d'éditeur. Mais j'ai un éditeur sur l'hôte Docker.
Ma solution de contournement est la suivante: Lier monter un volume de l'hôte Docker au conteneur ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ) et modifier le fichier en dehors du conteneur. Cela ressemble à ceci:
C'est principalement pour expérimenter, et plus tard, je changerais le fichier lors de la construction de l'image.
la source
Après avoir lancé un shell sur le conteneur Docker, tapez simplement:
la source
Vous pouvez ouvrir un fichier existant avec
et copiez tout le texte existant dans le presse-papiers.
Supprimez ensuite l'ancien fichier avec
ou renommer l'ancien fichier avec
Créez un nouveau fichier avec
Collez ensuite tout le texte copié dans le presse-papiers, appuyez sur
Enter
et quittez avec enregistrer en appuyant surctrl+z
. Et voila pas besoin d'installer tout type d'éditeurs.la source
Vous pouvez simplement modifier votre fichier sur l'hôte et le copier rapidement et l'exécuter à l'intérieur du conteneur. Voici mon raccourci d'une ligne pour copier et exécuter un fichier Python:
la source
Pour les opérations d'édition courantes, je préfère installer
vi
( vim-tiny ), qui utilise seulement 1491 ko ounano
qui utilise 1707 ko .En revanche,
vim
utilise 28,9 Mo .Nous devons nous rappeler que pour
apt-get install
travailler, nous devons faireupdate
la première fois, donc:Pour démarrer l'éditeur dans CLI, nous devons entrer
vi
.la source
Si vous utilisez un conteneur Windows et que vous souhaitez modifier n'importe quel fichier, vous pouvez obtenir et utiliser Vim dans la console Powershell facilement.
Pour décortiquer vers le conteneur Windows Docker avec PowerShell:
docker exec -it <name> powershell
Installez d'abord le gestionnaire de paquets Chocolatey
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Installer Vim
choco install vim
Rafraîchir VARIABLE ENVIRONNEMENTALE Vous pouvez simplement
exit
revenir au conteneurAllez à l'emplacement du fichier et Vim it
vim file.txt
la source
C'est un peu visqueux, mais à la rigueur, vous pouvez utiliser
sed
ouawk
pour faire de petites modifications ou supprimer du texte. Soyez prudent avec vos cibles regex bien sûr et sachez que vous êtes probablementroot
sur votre conteneur et que vous devrez peut-être réajuster les autorisations.Par exemple, supprimer une ligne complète contenant du texte correspondant à une expression régulière:
(Plus)
la source
Un moyen simple de modifier quelques lignes serait:
la source
Voir Stack Overflow question sed modifier le fichier en place
Ce serait une bonne option ici, si:
cat
.Installer Vim n'est pas autorisé ou prend trop de temps. Ma situation utilise l'image MySQL 5.7 quand je veux changer le
my.cnf
fichier, il n'y a pasvim
,vi
et installer Vim prend trop de temps (China Great Firewall).sed
est fourni dans l'image, et c'est assez simple. Mon utilisation est commesed -i /s/testtobechanged/textwanted/g filename
Utilisez
man sed
ou recherchez d'autres didacticiels pour une utilisation plus complexe.la source
Vous pouvez utiliser
cat
si installé, avec le>
caractère. Voici la manipulation:Vous pouvez maintenant voir le résultat avec la commande
la source
Vous pouvez également utiliser un conteneur spécial qui ne contiendra que la commande dont vous avez besoin: Vim. J'ai choisi python-vim . Il suppose que les données que vous souhaitez modifier se trouvent dans un conteneur de données construit avec le Dockerfile suivant:
Vous pourrez modifier vos données en montant un volume Docker (src_volume) qui sera partagé par votre conteneur de données (src_data) et le conteneur python-vim.
De cette façon, vous ne changez pas vos conteneurs. Vous utilisez simplement un conteneur spécial pour ce travail.
la source