Wie kann ich eine Datei Bearbeiten, nachdem ich die shell, um einen Docker-container?
Habe ich erfolgreich geschält, um einen Docker-container mit
docker exec -i -t 69f1711a205e bash
Ich muss die Datei Bearbeiten und ich habe keine Editoren innen:
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:/#
Wie kann ich die Dateien Bearbeiten?
- Ich benutze konfluent/postgres-bw:0.1
- apt-get install vim arbeitet. danke!
- also warum nicht die
Dockerfile
und sind unter anderem apt-get install Befehl und erstellen Sie Ihre eigenen container? Docker-container ist so konzipiert, da dies nicht Ihr Weg.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als in den Kommentaren, es gibt keine Standard-editor eingestellt - komisch - die
$EDITOR
Umgebungsvariable leer ist. Sie können log-in in einen Behälter mit:And run:
Oder verwenden Sie die folgenden Dockerfile:
Andockfenster gelieferten Bilder getrimmt werden, um das minimum - so dass kein editor installiert ist, mit der ausgelieferten container. Das ist, warum es eine Notwendigkeit, es manuell zu installieren.
BEARBEITEN
Ich auch Sie ermutigen, Lesen Sie meine post über das Thema.
docker exec -u 0 -it container_name bash
.vim-tiny
statt, wahrscheinlich./var/lib/docker/
apt-get
wurde nicht aufgrund der Erlaubnis im inneren container,also versuchte ichsed -i 's/texttobechanged/textwanted/g' filename
. Es funktionierte für mich.Wenn Sie nicht wollen, um ein editor hinzu, nur um ein paar kleine änderungen (z.B. ändern der Tomcat-Konfiguration), Sie können nur verwenden:
denen Kopien auf Ihrem lokalen Rechner (in das aktuelle Verzeichnis). Dann Bearbeiten Sie die Datei lokal mit Ihrem Lieblings-editor, und führen Sie dann eine
ersetzen die alte Datei.
docker cp <container>:C:\inetpub\wwwroot\Web.config .
unddocker cp Web.config <container>:C:\inetpub\wwwroot\Web.config
.docker exec -u 0 -it mycontainer bash
) und dann läuft einchown
Befehl.Können Sie
cat
wenn es installiert ist, das wird höchstwahrscheinlich der Fall sein, wenn es nicht eine blank/roh-container. Es funktioniert in eine Prise, und ok, wenn kopieren+einfügen in einen richtigen editor lokal.cat
wird die Ausgabe jeder Zeile auf den Empfang eines Zeilenumbruchs. Stellen Sie sicher, fügen Sie eine neue Zeile für die Letzte Zeile. ctrl-c sendet eineSIGINT
für die Katze würdevoll beenden. Aus den Bemerkungen, die Sie sehen, dass Sie können auch drücken Sie Strg-d, um zu Kennzeichnen, end-of-file ("keine weiteren Eingaben kommen").Weitere option ist so etwas wie
infilter
die injiziert ein Prozess, in den container namespace mit einigen ptrace magic: https://github.com/yadutaf/infilterctrl+D
ist besser alsctrl+C
.ctrl+D
sendet eineEOF
. Sie brauchen nicht, um einen zusätzlichen Zeilenumbruch am Ende. Mitctrl+C
, wenn Sie vergessen haben, fügen Sie den Zeilenumbruch, verlieren Sie die Letzte Zeile!Um Ihre Docker-images klein, installieren Sie keine unnötige Editoren. Bearbeiten können Sie die Dateien über SSH aus dem Docker host, um den container:
vim scp://
vim.wikia. Auch, um Ihre container-IP-Adresse, die Sie verwenden könnensudo docker inspect <container_id> | grep "IPAddress"
vim scp://[email protected]//data/gitea/conf/app.ini
sowievim scp://[email protected]//data/gitea/conf/app.ini
und beide von Ihnen einfach erstellen Sie eine neue, leere Datei.ssh
auf Ihre docker-container-ersten. Siehe blog.softwaremill.com/... . Aber im Allgemeinen werden Sie nicht wollen, zu installierenssh
in den container.Irgendwann müssen Sie zuerst den container mit
root
:Dann in den container, Vim installieren oder etwas anderes:
Benutze ich "docker run" (nicht "docker exec"), und ich bin in einer eingeschränkten zone, wo wir die Installation nicht mit einem editor. Aber ich habe einen editor auf dem Docker host.
Mein workaround ist: - Bind-mount eine volume von der Docker-host zu dem Behälter (https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems), und Bearbeiten Sie die Datei außerhalb des Behälters. Es sieht wie folgt aus:
Dies ist vor allem für das Experimentieren, und später würde ich die Datei ändern, die beim erstellen des Bildes.
Können Sie einfach Bearbeiten Sie Ihre Datei auf dem host und schnell kopieren Sie Sie in und führen Sie es in den container. Hier ist mein one-line-Verknüpfung kopieren und ausführen einer Python-Datei:
Nachdem Sie geschält, um die Docker-container, geben Sie einfach:
Für common-edit-Operationen, die ich lieber installieren
vi
(vim-tiny), die verwendet nur 1491 kB odernano
verwendet 1707 kB.In der anderen hand
vim
verwendet 28.9 MB.Müssen wir uns daran erinnern, dass, um für
apt-get install
zu arbeiten, haben wir dieupdate
ersten mal, also:Um den editor zu starten, in CLI wir eingeben müssen
vi
.Es ist eine Art, screwy, sondern in eine Prise können Sie
sed
oderawk
zu machen, kleine änderungen oder entfernen Sie text. Seien Sie vorsichtig mit Ihrer regex Ziele natürlich und werden sich bewusst, dass Sie wahrscheinlichroot
auf Ihre container und haben könnte, um re-Berechtigungen anpassen.Beispielsweise das entfernen einer vollen Zeile, die text enthält passende regex:
(Mehr)
Einen einfachen Weg zum Bearbeiten von ein paar Zeilen wäre:
Finden Sie unter Stack Overflow Frage
sed-Datei zu Bearbeiten
Wäre es eine gute option, wenn:
cat
.Vim installieren ist nicht erlaubt oder zu lange dauert.
Meine situation ist die Verwendung des MySQL 5.7 Bild, wenn ich ändern möchten die
my.cnf
- Datei, es gibt keinevim
,vi
und Vim installieren dauert zu lange (China Great Firewall).sed
ist im Bild, und es ist ganz einfach. Mein Sprachgebrauch ist wiesed -i /s/testtobechanged/textwanted/g filename
Verwenden
man sed
oder suchen Sie nach anderen tutorials für komplexere Verwendung.Können Sie auch einen speziellen container, die enthalten nur den benötigten Befehl: Vim. Ich wählte python-vim. Es wird davon ausgegangen, dass die Daten, die Sie Bearbeiten wollen, werden in einem Daten-container erstellt mit dem folgenden Dockerfile:
Werden Sie in der Lage, Ihre Daten zu Bearbeiten durch die Montage eines Docker-Volumen (src_volume), die gemeinsam Ihre Daten-container (src_data) und die python-vim-container.
Dass die Art und Weise, die Sie nicht ändern Sie Ihre Container. Verwenden Sie einfach ein Spezial-container für diese Arbeit.
Wenn Sie Windows benutzen, container und Sie möchten, ändern Sie jede Datei, die Sie bekommen können und verwenden Sie Vim in der Powershell-Konsole leicht.
Zu schälen, um die Windows Docker-container mit PowerShell:
docker exec -it <name> powershell
Ersten installieren Schokoladig Paket-manager
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Vim Installieren
choco install vim
Aktualisieren Umgebungs-VARIABLE
Sie können nur
exit
und shell zurück, um die containerGehen Sie zum Speicherort der Datei und Vim
vim file.txt