Wie kann man vi auf einem Docker-Container ausführen?

100

Ich habe Docker auf meiner virtuellen Hostmaschine installiert. Und jetzt wollen Sie eine Datei mit erstellen vi.

Aber es zeigt mir einen Fehler:

bash: vi: command not found
Krati Jain
quelle
1
vi darf nicht im Container installiert werden. Welchen Container haben Sie installiert und ausgeführt?
Hüseyin BABAL
1
Sie müssen genauer sein. Versuchen Sie, vi in ​​einem Container auszuführen. Wenn ja, auf welchem ​​Image basiert der Container? Höchstwahrscheinlich haben Sie vi nicht installiert. (apt-get install vim)
wpp
Es hängt davon ab, von welchem imageSie bauen. Höchstwahrscheinlich ist imageIhre Verwendung so leicht, dass sie nur Dinge enthält, die Sie als Image ausführen müssen. Sie müssen die benötigten Pakete manuell installieren.
Illusionist
3
Sie sollten die Konfiguration wahrscheinlich nicht in einem Container durchführen. Tun Sie es stattdessen in der Docker-Datei.
Adrian Mouat

Antworten:

138

Melden Sie sich mit dem folgenden Befehl im Container an:

docker exec -it <container> bash

Führen Sie dann den folgenden Befehl aus.

apt-get update
apt-get install vim
arunprakashpj
quelle
11
Wenn Sie beim Ausführen von apt-get auf ein Problem mit verweigerter Berechtigung stoßen, müssen Sie Docker Exec als Root ausführen. "docker exec -u root -it <container> bash". Dann sollte apt-get funktionieren.
Java25
Danke @arunprakashpj. Der einzige Befehl, der für aus dem AWS-Repository heruntergeladene Bilder funktioniert hat.
RealPK
36

Ihr Container hat es wahrscheinlich nicht sofort installiert.

Laufen Sie apt-get install vimim Terminal und Sie sollten bereit sein zu gehen.

Englund
quelle
2
Ja, aber ich bevorzuge vim-tiny(Ubuntu)
Ben Whaley
2
Bevor Sie 'apt-get install vim' ausführen, müssen Sie 'apt-get update' ausführen.
Benutzer1521213
2
Zuerst apt-get updateDANNapt-get install vim
Yogi Ghorecha
30

Der auszuführende Befehl hängt davon ab, welches Basisimage Sie verwenden.

Für Alpine viwird als Teil des Basisbetriebssystems installiert. Die Installation vimwäre:

apk -U add vim

Für Debian und Ubuntu:

apt-get update && apt-get install -y vim

Für CentOS viwird normalerweise mit dem Basisbetriebssystem installiert. Für vim:

yum install -y vim

Dies sollte nur in der frühen Entwicklung erfolgen. Sobald Sie einen funktionierenden Container erhalten haben, sollten die Änderungen an Dateien an Ihrem Image oder den außerhalb Ihres Containers gespeicherten Konfigurationen vorgenommen werden. Aktualisieren Sie Ihre Docker-Datei und andere Dateien, mit denen ein neues Image erstellt wird. Dies sollte in der Produktion sicherlich nicht erfolgen, da Änderungen im Inneren des Behälters von Natur aus kurzlebig sind und beim Austausch des Behälters verloren gehen.

BMitch
quelle
1
FEHLER: Datenbank kann nicht
gesperrt
1
@ garg10may-Befehle müssen als root ausgeführt werden. USER rootin der Docker-Datei tut dies, aber stellen Sie sicher, dass Sie zu Ihrem anderen Benutzer zurückkehren. Ich bin ein laufender Container:docker exec -u root ...
BMitch
18

BENUTZE DAS:

apt-get update && apt-get install -y vim

Erläuterung des obigen Befehls

  1. apt-get update => Aktualisiert das aktuelle Paket
  2. apt-get install => Installiert das Paket
  3. -y => Übergibt die Berechtigung, die Standardberechtigung wird auf Ja gesetzt.
  4. vim => Name des Pakets, das Sie installieren möchten.
Yogi Ghorecha
quelle
12

Fügen Sie die folgende Zeile in Ihre Docker-Datei ein und erstellen Sie das Docker-Image neu.

RUN apt-get update && apt-get install -y vim
CJ Chang
quelle
8

Alternativ können Sie Ihre Docker-Images klein halten, indem Sie keine unnötigen Editoren installieren. Sie können die Dateien über ssh vom Docker-Host zum Container bearbeiten:

vim scp://remoteuser@container-ip//path/to/document
Matthew
quelle
3
Würde das nicht nur funktionieren, wenn auf dem Container ssh ausgeführt wird ? Anfangs dachte ich, es sei eine brillante Idee, aber ich kann sie anscheinend nicht zum Laufen bringen.
Kevin
7

Verwenden Sie den folgenden Befehl im Debian-basierten Container:

apt-get install vim-tiny

Vollständige Anleitung zur Verwendung in Dockerfile:

RUN apt-get update && apt-get install --no-install-recommends -y \   
 vim-tiny \  
 && apt-get clean && rm -rf /var/lib/apt/lists/*

Es werden keine unnötigen Pakete installiert und unnötige heruntergeladene Dateien entfernt, sodass die Größe Ihres Docker-Images nicht dramatisch zunimmt.

Pourya MandiSanam
quelle
3

Um in Ihrem Docker-Container zu installieren, können Sie den Befehl ausführen

docker exec apt-get update && apt-get install -y vim

Dies ist jedoch auf den Container beschränkt, in dem vim installiert ist. Um es allen Containern zur Verfügung zu stellen, bearbeiten Sie die Docker-Datei und fügen Sie sie hinzu

RUN apt-get update && apt-get install -y vim

Sie können das Image auch in der neuen Docker-Datei erweitern und den obigen Befehl hinzufügen. Z.B.

FROM <Bildname>

RUN apt-get update && apt-get install -y vim

MB11
quelle
1

Innerhalb des Containers (im Docker, nicht in der VM) werden diese standardmäßig nicht installiert. Selbst apt-get , wget wird nicht funktionieren. Meine VM läuft unter Ubuntu 17.10. Für mich hat yum package manaager funktioniert.

Yum ist kein Teil von Debian oder Ubuntu. Es ist Teil von Red-Hat. Aber es funktioniert in Ubuntu und ist standardmäßig wie apt-get installiert

Um vim zu installieren, verwenden Sie diesen Befehl

yum install -y vim-enhanced 

So deinstallieren Sie vim:

yum uninstall -y vim-enhanced 

Ähnlich,

yum install -y wget 
yum install -y sudo 

-y steht für die Annahme von Ja, wenn Sie nach der Installation des Paketnamens aufgefordert werden, eine Frage zu stellen

P Satish Patro
quelle
0

Wenn Sie tatsächlich einen kleinen Editor für die einfache Verwaltung in einem Docker benötigen, verwenden Sie diesen in Ihrer Docker-Datei:

RUN apt-get install -y busybox && ln -s /bin/busybox /bin/vi

Ich habe es auf einem Ubuntu 18-basierten Docker verwendet. (Natürlich benötigen Sie möglicherweise eine RUN apt-get updatevorher, aber wenn Sie Ihre eigene Docker-Datei erstellen, haben Sie diese wahrscheinlich bereits.)

Samuel Åslund
quelle
0

Wenn Sie eine Datei nur einmal ändern müssen. Sie sollten die Änderung lieber lokal vornehmen und mit dieser Datei ein neues Docker-Image erstellen.

Angenommen, Sie müssen in einem Docker-Image eine Datei mit dem Namen myFile.xml unter / path / to / docker / image / ändern. Also musst du tun.

  1. Kopieren Sie myFile.xml in Ihr lokales Dateisystem und nehmen Sie die erforderlichen Änderungen vor.
  2. Erstellen Sie eine Datei mit dem Namen 'Dockerfile' mit dem folgenden Inhalt:
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

Erstellen Sie dann Ihr eigenes Docker-Image mit docker build -t docker-repo:v-x.x.x .

Verwenden Sie dann Ihr neu erstelltes Docker-Image.

Misbah
quelle