Z powodzeniem ostrzelałem do kontenera Docker, używając:
docker exec -i -t 69f1711a205e bash
Teraz muszę edytować plik i nie mam w nim żadnych edytorów:
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:/#
Jak edytować pliki?
Dockerfile
i dołączyć komendy apt-get install i wygenerować własny kontener? Kontener Docker jest zaprojektowany tak, a nie na twój sposób.Odpowiedzi:
Jak w komentarzach, nie ma domyślnego zestawu edytorów - dziwne -
$EDITOR
zmienna środowiskowa jest pusta. Możesz zalogować się do kontenera za pomocą:I biegnij:
Lub użyj następującego pliku Docker:
Obrazy dokerów są dostarczane przycięte do absolutnego minimum - więc z dostarczonym kontenerem nie jest instalowany żaden edytor. Dlatego trzeba go zainstalować ręcznie.
EDYTOWAĆ
Zachęcam również do przeczytania mojego postu na ten temat.
źródło
docker exec -u 0 -it container_name bash
.vim-tiny
, prawdopodobnie lepiej go zainstalować ./var/lib/docker/
apt-get
nie działał z powodu problemu z uprawnieniami w kontenerze, więc próbowałemsed -i 's/texttobechanged/textwanted/g' filename
. To zadziałało dla mnie.Jeśli nie chcesz dodawać edytora, aby wprowadzić kilka drobnych zmian (np. Zmienić konfigurację Tomcat), możesz po prostu użyć:
który kopiuje go na komputer lokalny (do bieżącego katalogu). Następnie edytuj plik lokalnie za pomocą swojego ulubionego edytora, a następnie wykonaj
zastąpić stary plik.
źródło
docker cp <container>:C:\inetpub\wwwroot\Web.config .
idocker cp Web.config <container>:C:\inetpub\wwwroot\Web.config
.docker exec -u 0 -it mycontainer bash
), a następnie uruchamiającchown
polecenie.Możesz użyć,
cat
jeśli jest zainstalowany, co najprawdopodobniej tak będzie, jeśli nie jest to pusty / surowy pojemnik. Działa w mgnieniu oka i dobrze, gdy kopiuj + wklej lokalnie do odpowiedniego edytora.cat
wypisze każdą linię po otrzymaniu nowej linii. Pamiętaj, aby dodać nowy wiersz dla tego ostatniego wiersza. ctrl-c wysyłaSIGINT
kota z wdziękiem. Z komentarzy widać, że można także nacisnąć ctrl-d, aby zaznaczyć koniec pliku („nie ma już żadnych danych wejściowych”).Inną opcją jest coś,
infilter
co wstrzykuje proces do przestrzeni nazw kontenera z pewną magią ptrace: https://github.com/yadutaf/infilterźródło
ctrl+D
jest lepszy niżctrl+C
.ctrl+D
wysyłaEOF
. Nie musisz dodawać dodatkowej nowej linii na końcu. Dziękictrl+C
, jeśli zapomnisz dodać nowy wiersz, stracisz ostatnią linię!Aby utrzymać małe obrazy Dockera, nie instaluj niepotrzebnych edytorów. Możesz edytować pliki przez SSH z hosta Dockera do kontenera:
źródło
vim scp://
vim.wikia . Ponadto, aby uzyskać adres IP kontenera, możesz użyćsudo docker inspect <container_id> | grep "IPAddress"
vim scp://[email protected]//data/gitea/conf/app.ini
zarówno jakvim scp://[email protected]//data/gitea/conf/app.ini
i oba tworzą po prostu nowy, pusty plik.ssh
kontenera dokera . Zobacz blog.softwaremill.com/… . Ale generalnie nie chcesz instalowaćssh
w swoim kontenerze.Czasami musisz najpierw uruchomić kontener z
root
:Następnie w kontenerze, aby zainstalować Vima lub coś innego:
źródło
Używam „docker run” (nie „docker exec”) i jestem w strefie ograniczonej, w której nie możemy zainstalować edytora. Ale mam edytor na hoście Docker.
Moje obejście polega na: powiązaniu zamontowania woluminu z hosta Dockera do kontenera ( https://docs.docker.com/engine/reference/run/#/volume-shared-filesystems ) i edycji pliku poza kontenerem. To wygląda tak:
Jest to głównie do eksperymentów, a później zmieniam plik podczas tworzenia obrazu.
źródło
Po ostrzelaniu do kontenera Docker po prostu wpisz:
źródło
Możesz otworzyć istniejący plik za pomocą
i skopiuj cały istniejący tekst do schowka.
Następnie usuń stary plik za pomocą
lub zmień nazwę starego pliku za pomocą
Utwórz nowy plik za pomocą
Następnie wklej cały tekst skopiowany do schowka, naciśnij
Enter
i wyjdź z zapisz, naciskającctrl+z
. I voila nie trzeba instalować żadnych edytorów.źródło
Możesz po prostu edytować plik na hoście, szybko skopiować go i uruchomić w kontenerze. Oto mój jednowierszowy skrót do skopiowania i uruchomienia pliku Python:
źródło
Do typowych operacji edycyjnych wolę zainstalować
vi
( vim-tiny ), który używa tylko 1491 kB lubnano
który używa 1707 kB .Z drugiej strony
vim
używa 28,9 MB .Musimy pamiętać, że
apt-get install
aby pracować, musimy zrobić toupdate
za pierwszym razem, więc:Aby uruchomić edytor w CLI , musimy wejść
vi
.źródło
Jeśli używasz kontenera Windows i chcesz zmienić dowolny plik, możesz łatwo uzyskać i używać Vima w konsoli Powershell.
Aby wykonać ostrzał do kontenera Windows Docker za pomocą PowerShell:
docker exec -it <name> powershell
Najpierw zainstaluj menedżera pakietów Chocolatey
Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression;
Zainstaluj Vima
choco install vim
Odśwież ZMIENNE ŚRODOWISKOWE Możesz po prostu
exit
powrócić do pojemnikaPrzejdź do lokalizacji pliku i Vim go
vim file.txt
źródło
Jest to trochę nieprzyjemne, ale w mgnieniu oka możesz użyć
sed
lubawk
wprowadzić małe zmiany lub usunąć tekst. Uważaj oczywiście na cele wyrażenia regularnego i pamiętaj, że prawdopodobnie jesteśroot
na swoim kontenerze i być może będziesz musiał ponownie dostosować uprawnienia.Na przykład usunięcie pełnego wiersza zawierającego tekst pasujący do wyrażenia regularnego:
(Więcej)
źródło
Łatwym sposobem edycji kilku wierszy byłoby:
źródło
Zobacz plik edycji przepełnienia stosu na miejscu
Byłaby to dobra opcja, jeśli:
cat
.Instalowanie Vima jest niedozwolone lub trwa zbyt długo. Moja sytuacja jest przy użyciu MySQL 5.7 obraz, gdy chcę zmienić
my.cnf
plik, tam nie mavim
,vi
i Vim zainstalować trwa zbyt długo (Chiny Great Firewall).sed
jest pokazany na obrazku i jest dość prosty. Moje użycie jest jaksed -i /s/testtobechanged/textwanted/g filename
Użyj
man sed
lub poszukaj innych samouczków, aby uzyskać bardziej złożone zastosowanie.źródło
Możesz użyć,
cat
jeśli jest zainstalowany, z>
caracter. Oto manipulacja:Teraz możesz zobaczyć wynik za pomocą polecenia
źródło
Możesz także użyć specjalnego kontenera, który będzie zawierał tylko potrzebne polecenie: Vim. Wybrałem python-vim . Zakłada się, że dane, które chcesz edytować, znajdują się w kontenerze danych zbudowanym z następującego pliku Docker:
Będziesz mógł edytować swoje dane, instalując wolumin Docker (src_volume), który będzie współdzielony przez twój kontener danych (src_data) i kontener python-vim.
W ten sposób nie zmieniasz swoich pojemników. Do tej pracy używasz specjalnego pojemnika.
źródło