Jak uruchomić vi w kontenerze docker?

103

Zainstalowałem docker na mojej maszynie wirtualnej hosta. A teraz chcę utworzyć plik przy użyciu vi.

Ale pokazuje mi błąd:

bash: vi: command not found
Krati Jain
źródło
1
vi nie może być instalowane w kontenerze. Który kontener zainstalowałeś i uruchomiłeś?
Hüseyin BABAL
1
Musisz być bardziej szczegółowy. Czy próbujesz uruchomić vi wewnątrz kontenera, jeśli tak, na którym obrazie jest oparty kontener? Najprawdopodobniej nie masz zainstalowanego vi. (apt-get install vim)
wpp,
To zależy od tego, z imageczego budujesz. Najprawdopodobniej imageużywasz jest tak lżejszy, że zawiera tylko rzeczy, które musisz uruchomić jako obraz. Musisz ręcznie zainstalować potrzebne pakiety.
iluzjonista
3
Prawdopodobnie nie powinieneś robić konfiguracji wewnątrz kontenera. Zamiast tego zrób to w pliku Dockerfile.
Adrian Mouat

Odpowiedzi:

150

zaloguj się do kontenera za pomocą następującego polecenia:

docker exec -it <container> bash

Następnie uruchom następujące polecenie.

apt-get update
apt-get install vim
arunprakashpj
źródło
11
Jeśli podczas uruchamiania apt-get napotkasz problem z odmową uprawnień, musisz uruchomić docker exec jako root. "docker exec -u root -it <container> bash". Wtedy apt-get powinien działać.
java25
Dzięki @arunprakashpj. Jedyne polecenie, które działało dla obrazu pobranego z repozytorium AWS.
realPK
37

Twój kontener prawdopodobnie nie został zainstalowany po wyjęciu z pudełka.

Uruchom apt-get install vimterminal i powinieneś być gotowy do pracy.

Englund
źródło
2
Tak, ale wolę vim-tiny(Ubuntu)
Ben Whaley
3
Przed uruchomieniem „apt-get install vim” należy uruchomić „apt-get update”.
user1521213
2
First apt-get updateTHENapt-get install vim
Yogi Ghorecha,
32

Polecenie do uruchomienia zależy od używanego obrazu podstawowego.

W przypadku Alpine vijest instalowany jako część podstawowego systemu operacyjnego. Instalacja vimwyglądałaby następująco:

apk -U add vim

Dla Debiana i Ubuntu:

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

W przypadku CentOS vijest zwykle instalowany z podstawowym systemem operacyjnym. Dla vim:

yum install -y vim

Należy to zrobić tylko na wczesnym etapie rozwoju. Po uzyskaniu działającego kontenera zmiany w plikach powinny zostać wprowadzone w obrazie lub konfiguracjach przechowywanych poza kontenerem. Zaktualizuj swój plik Dockerfile i inne pliki, których używa do tworzenia nowego obrazu. Z pewnością nie powinno się tego robić podczas produkcji, ponieważ zmiany wewnątrz pojemnika są z założenia efemeryczne i zostaną utracone po wymianie pojemnika.

BMitch
źródło
1
BŁĄD: nie można zablokować bazy danych: odmowa
dostępu
1
Polecenia @ garg10may muszą być uruchamiane jako root. USER rootwewnątrz pliku Dockerfile robi to, ale pamiętaj, aby przełączyć się z powrotem do innego użytkownika. Jestem uruchomionym kontenerem:docker exec -u root ...
BMitch
21

UŻYJ TEGO:

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

Wyjaśnienie powyższego polecenia

  1. apt-get update => Zaktualizuje bieżący pakiet
  2. apt-get install => zainstaluje pakiet
  3. -y => Pominie uprawnienia, domyślne uprawnienia zostaną ustawione na Tak.
  4. vim => Nazwa pakietu, który chcesz zainstalować.
Yogi Ghorecha
źródło
Próbowałem, ale otrzymałem ten błądbash: apt-get: command not found
Junaid
@Junaid sprawdzić zapk add
Yogi Ghorecha
12

Dodaj następujący wiersz w pliku Dockerfile, a następnie odbuduj obraz Dockera.

RUN apt-get update && apt-get install -y vim
CJ Chang
źródło
9

Możesz też zachować małe obrazy Dockera, nie instalując niepotrzebnych edytorów. Możesz edytować pliki przez ssh z hosta dockera do kontenera:

vim scp://remoteuser@container-ip//path/to/document
Mateusz
źródło
3
Czy to nie zadziała tylko wtedy, gdy w kontenerze działa ssh ? Na początku myślałem, że to świetny pomysł, ale nie wydaje mi się, żeby zadziałał.
Kevin
7

Użyj poniższego polecenia w kontenerze opartym na Debianie:

apt-get install vim-tiny

Pełna instrukcja użycia w Dockerfile:

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

Nie instaluje niepotrzebnych pakietów i usuwa niepotrzebne pobrane pliki, więc rozmiar obrazu Dockera nie wzrośnie dramatycznie.

Pourya MandiSanam
źródło
3

Aby zainstalować w kontenerze Docker, możesz uruchomić polecenie

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

Ale będzie to ograniczone do kontenera, w którym jest zainstalowany vim. Aby udostępnić go wszystkim kontenerom, edytuj plik Dockerfile i dodaj

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

lub możesz również rozszerzyć obraz w nowym pliku Dockerfile i dodać powyższe polecenie. Na przykład.

OD <nazwa obrazu>

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

MB11
źródło
1

Wewnątrz kontenera (w dokerze, a nie w maszynie wirtualnej), domyślnie te elementy nie są instalowane. Nawet apt-get , wget nie będzie działać. Moja maszyna wirtualna działa w systemie Ubuntu 17.10. U mnie działał menadżer paczek mniam .

Yum nie jest częścią debiana ani ubuntu. Jest częścią czerwonego kapelusza. Ale działa w Ubuntu i jest domyślnie instalowany jak apt-get

Aby zainstalować vima, użyj tego polecenia

yum install -y vim-enhanced 

Aby odinstalować Vima:

yum uninstall -y vim-enhanced 

Podobnie,

yum install -y wget 
yum install -y sudo 

-y służy do zakładania tak, jeśli zostanie wyświetlony monit o jakiekolwiek pytanie po wykonaniu yum install nazwa pakietu

P Satish Patro
źródło
0

Jeśli faktycznie potrzebujesz małego edytora do prostego porządkowania w dokerze, użyj tego w swoim pliku Dockerfile:

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

Użyłem go na dokerze opartym na Ubuntu 18. (Oczywiście możesz potrzebować RUN apt-get updateprzed nim, ale jeśli tworzysz własny plik Dockera, prawdopodobnie już go masz).

Samuel Åslund
źródło
0

Jeśli chcesz zmienić plik tylko raz. Najlepiej dokonać zmiany lokalnie i zbudować nowy obraz dockera z tym plikiem.

Powiedzmy w obrazie Dockera, że ​​musisz zmienić plik o nazwie myFile.xml w / path / to / docker / image /. Więc musisz to zrobić.

  1. Skopiuj plik myFile.xml do lokalnego systemu plików i wprowadź niezbędne zmiany.
  2. Utwórz plik o nazwie „Dockerfile” z następującą zawartością:
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

Następnie utwórz własny obraz dockera za pomocą docker build -t docker-repo:v-x.x.x .

Następnie użyj nowo utworzonego obrazu dockera.

misbah
źródło