Ich habe erfolgreich in einen Docker-Container geschält, indem ich:
docker exec -i -t 69f1711a205e bash
Jetzt muss ich die Datei bearbeiten und habe keine Editoren mehr:
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 bearbeite ich Dateien?
Dockerfile
Befehl und include apt-get install erstellen und einen eigenen Container generieren? Der Docker-Container ist so konzipiert, nicht wie Sie es möchten.Antworten:
Wie in den Kommentaren ist kein Standardeditor festgelegt - seltsam - die
$EDITOR
Umgebungsvariable ist leer. Sie können sich in einem Container anmelden mit:Und Renn:
Oder verwenden Sie die folgende Docker-Datei:
Docker-Images werden auf das Nötigste zugeschnitten geliefert - daher wird kein Editor mit dem ausgelieferten Container installiert. Aus diesem Grund muss es manuell installiert werden.
BEARBEITEN
Ich ermutige Sie auch, meinen Beitrag zum Thema zu lesen .
quelle
docker exec -u 0 -it container_name bash
.vim-tiny
wahrscheinlich besser, stattdessen zu installieren ./var/lib/docker/
apt-get
funktionierte aufgrund eines Berechtigungsproblems im Container nicht, also habe ich es versuchtsed -i 's/texttobechanged/textwanted/g' filename
. Es hat bei mir funktioniert.Wenn Sie keinen Editor hinzufügen möchten, um nur ein paar kleine Änderungen vorzunehmen (z. B. die Tomcat-Konfiguration zu ändern), können Sie einfach Folgendes verwenden:
Dadurch wird es auf Ihren lokalen Computer (in Ihr aktuelles Verzeichnis) kopiert. Bearbeiten Sie dann die Datei lokal mit Ihrem bevorzugten Editor und führen Sie dann eine aus
um die alte Datei zu ersetzen.
quelle
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
) in den Container gehen und dann einenchown
Befehl ausführen.Sie können es verwenden,
cat
wenn es installiert ist. Dies ist höchstwahrscheinlich der Fall, wenn es sich nicht um einen bloßen / rohen Container handelt. Es funktioniert zur Not und ist in Ordnung, wenn Sie es lokal in einen geeigneten Editor kopieren und einfügen.cat
gibt jede Zeile beim Empfang einer neuen Zeile aus. Stellen Sie sicher, dass Sie für diese letzte Zeile eine neue Zeile hinzufügen. Strg-C sendet eineSIGINT
for-Katze, um sie ordnungsgemäß zu beenden . Aus den Kommentaren geht hervor, dass Sie auch Strg-D drücken können, um das Dateiende zu kennzeichnen ("keine Eingabe mehr").Eine andere Option ist so etwas wie
infilter
das Einfügen eines Prozesses in den Containernamensraum mit etwas Ptrace-Magie: https://github.com/yadutaf/infilterquelle
ctrl+D
ist besser alsctrl+C
.ctrl+D
sendet eineEOF
. Sie müssen am Ende keinen zusätzlichen Zeilenumbruch hinzufügen. Mitctrl+C
vergessen , wenn Sie das Newline hinzufügen, werden Sie die letzte Zeile verlieren!Installieren Sie keine unnötigen Editoren, um Ihre Docker-Images klein zu halten. Sie können die Dateien über SSH vom Docker-Host in den Container bearbeiten:
quelle
vim scp://
vim.wikia besser erklärt . Um die IP-Adresse Ihres Containers zu erhalten, können Sie auch verwendensudo 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 erstellen einfach eine neue, leere Datei.ssh
auf Ihrem Docker-Container. Siehe blog.softwaremill.com/… . Im Allgemeinen möchten Sie jedoch nichtssh
in Ihrem Container installieren .Manchmal müssen Sie den Container zuerst ausführen mit
root
:Dann in den Container, um Vim oder etwas anderes zu installieren:
quelle
Ich verwende "Docker Run" (nicht "Docker Exec") und bin in einer Sperrzone, in der wir keinen Editor installieren können. Aber ich habe einen Editor auf dem Docker-Host.
Meine Problemumgehung lautet: Binden Sie ein Volume vom Docker-Host an den Container ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ) und bearbeiten Sie die Datei außerhalb des Containers. Es sieht aus wie das:
Dies dient hauptsächlich zum Experimentieren. Später würde ich die Datei beim Erstellen des Bildes ändern.
quelle
Nachdem Sie den Docker-Container aufgerufen haben, geben Sie einfach Folgendes ein:
quelle
Sie können vorhandene Dateien mit öffnen
und kopieren Sie den gesamten vorhandenen Text in die Zwischenablage.
Dann löschen Sie die alte Datei mit
oder benenne alte Datei mit um
Neue Datei erstellen mit
Fügen Sie dann den gesamten in die Zwischenablage kopierten Text ein, drücken Sie
Enter
und beenden Sie mit Speichern durch Drücken vonctrl+z
. Und voila keine Notwendigkeit, irgendwelche Editoren zu installieren.quelle
Sie können Ihre Datei einfach auf dem Host bearbeiten und schnell in den Container kopieren und dort ausführen. Hier ist meine einzeilige Verknüpfung zum Kopieren und Ausführen einer Python-Datei:
quelle
Für gemeinsame Editieroperationen ziehe ich es installieren
vi
( vim-tiny ), die nur verwendet 1491 kB odernano
welche verwendet 1707 kB .In der anderen Hand
vim
verwendet 28,9 MB .Wir müssen uns daran erinnern, dass
apt-get install
wir zumupdate
ersten Mal das erste Mal arbeiten müssen, also:So starten Sie den Editor in der CLI müssen wir eingeben
vi
.quelle
Wenn Sie einen Windows-Container verwenden und eine beliebige Datei ändern möchten, können Sie Vim in der Powershell-Konsole problemlos herunterladen und verwenden.
So schalten Sie mit PowerShell in den Windows Docker-Container:
docker exec -it <name> powershell
Installieren Sie zuerst den Chocolatey-Paketmanager
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Installieren Sie Vim
choco install vim
UMWELTVARIABLE aktualisieren Sie können einfach
exit
und zurück zum Behälter schälenGehen Sie zum Dateispeicherort und Vim es
vim file.txt
quelle
Es ist eine Art verrückt, aber im Notfall können Sie verwenden ,
sed
oderawk
kleine Änderungen oder Entfernen von Text zu machen. Seien Sie natürlich vorsichtig mit Ihren Regex-Zielen und beachten Sie, dass Sie sich wahrscheinlichroot
auf Ihrem Container befinden und möglicherweise die Berechtigungen neu anpassen müssen.Entfernen Sie beispielsweise eine vollständige Zeile, die Text enthält, der einem regulären Ausdruck entspricht:
(Mehr)
quelle
Eine einfache Möglichkeit, einige Zeilen zu bearbeiten, wäre:
quelle
Siehe Frage zum Stapelüberlauf und zum Bearbeiten der Datei
Hier wäre es eine gute Option, wenn:
cat
.Die Installation von Vim ist nicht zulässig oder dauert zu lange. Meine Situation ist das MySQL 5.7 Bild zu verwenden , wenn ich das ändern möge
my.cnf
Datei, gibt es keinevim
,vi
und Vim installieren dauert lange (China Great Firewall).sed
wird im Bild bereitgestellt, und es ist ganz einfach. Meine Nutzung ist wiesed -i /s/testtobechanged/textwanted/g filename
Verwenden
man sed
oder suchen Sie nach anderen Tutorials für eine komplexere Verwendung.quelle
Sie können,
cat
falls installiert, mit dem>
Zeichen verwenden. Hier ist die Manipulation:Jetzt können Sie das Ergebnis mit dem Befehl sehen
quelle
Sie können auch einen speziellen Container verwenden, der nur den Befehl enthält, den Sie benötigen: Vim. Ich habe mich für Python-Vim entschieden . Es wird davon ausgegangen, dass sich die Daten, die Sie bearbeiten möchten, in einem Datencontainer befinden, der mit der folgenden Docker-Datei erstellt wurde:
Sie können Ihre Daten bearbeiten, indem Sie ein Docker-Volume (src_volume) bereitstellen, das von Ihrem Datencontainer (src_data) und dem Python-Vim-Container gemeinsam genutzt wird.
Auf diese Weise ändern Sie Ihre Container nicht. Sie verwenden für diese Arbeit nur einen speziellen Behälter.
quelle