Jak wejść do kontenera Docker już działającego z nowym TTY

Mam kontener, który uruchamia usługę Apache na pierwszym planie. Chciałbym mieć dostęp do kontenera z innej powłoki, aby "grzebać" w nim i sprawdzać pliki. W tej chwili, jeśli dołączę do kontenera, pozostaję patrząc na demona Apache i nie mogę uruchomić żadnych poleceń.

Czy możliwe jest dołączenie innego tty do działającego kontenera? Możliwe, że mogę skorzystać z faktu, że Docker właśnie owija się wokół kontenerów LXC? I próbowałem sudo lxc-console -n [container-id] -t [1-4], ale wydaje się, że tylko jeden tty jest dostępny i to jest ten, który uruchamia demona apache. Może istnieje sposób na włączenie wielu konsol lxc podczas budowania?

Wolałbym , a nie konfigurować i budować kontener z usługą openssh, jeśli to możliwe.

 388
Author: Diogo Gomes, 2014-01-05

9 answers

W docker 1.3 jest nowe polecenie docker exec. Pozwala to na wprowadzenie uruchomionego Dockera:

docker exec -it [container-id] bash
 756
Author: Michael_Scharf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 17:41:48

Aby wejść do kontenera bez użycia SSH, należy użyć narzędzia Jérôme 'a Petazzoniego o nazwie "nsenter". Zobacz: https://github.com/jpetazzo/nsenter

Install with simply running: docker run -v /usr/local/bin:/target jpetazzo/nsenter

Następnie użyj polecenia docker-enter <container-id>, aby wprowadzić kontener.

 39
Author: Hyperfocus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-05 13:57:03

Update

Od wersji docker 0.9, aby poniższe kroki zadziałały, należy teraz zaktualizować plik /etc/default/docker za pomocą '-e lxc' do opcji uruchamiania demona Docker przed ponownym uruchomieniem demona (zrobiłem to przez ponowne uruchomienie hosta).

aktualizacja do pliku / etc / default / docker

To wszystko dlatego...

...it [docker 0.9] zawiera nowy" sterownik silnika", aby umożliwić korzystanie innego API niż LXC, aby uruchomić kontenery. Zapewnia również nowe sterownik silnika oparty na nowym Biblioteka API (libcontainer), która jest w stanie do obsługi grup kontrolnych bez użycia narzędzi LXC. Głównym problemem jest że jeśli polegasz na lxc-dołącz do wykonywania działań na swoim kontenera, jak uruchomienie powłoki wewnątrz kontenera, która jest szalenie przydatne dla środowiska developpment...

Źródło

Należy pamiętać, że spowoduje to uniemożliwienie "działania" nowej opcjonalnej funkcji sieciowej Docker 0.11 host only interfejs loopback. Zgłoś błąd


Okazuje się, że rozwiązaniem dla innego pytania było również rozwiązanie dla tego:

...możesz użyć docker ps -notrunc, aby uzyskać pełny identyfikator kontenera lxc i następnie użyj lxc-attach -n <container_id> Uruchom bash w tym kontenerze jako root.

Aktualizacja: wkrótce będziesz musiał użyć ps --no-trunc zamiast ps -notrunc, który jest przestarzały.

Tutaj wpisz opis obrazkaZnajdź pełny identyfikator kontenera

Tutaj wpisz opis obrazkaWpisz LXC załącz dowództwo.

Tutaj wpisz opis obrazkaTop pokazuje mój proces apache uruchamiający ten docker.

 18
Author: Programster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:42

nsenter tak. Jednak musiałem również wprowadzić kontener w prosty sposób, a nsenter nie wystarczyło do moich potrzeb. W niektórych przypadkach był wadliwy(czarny ekran plus-flaga wd nie działa). Ponadto chciałem zalogować się jako konkretny użytkownik i w określonym katalogu.

W końcu stworzyłem własne narzędzie do wprowadzania kontenerów. Można go znaleźć pod adresem: https://github.com/Pithikos/docker-enter

Jego użycie jest tak proste jak
./docker-enter [-u <user>] [-d <directory>] <container ID>
 4
Author: Pithikos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-30 16:42:04

A co z uruchomieniem tmux / GNU Screen wewnątrz kontenera? Wygląda na to, że łatwiej jest uzyskać dostęp do tylu vty, ile chcesz za pomocą prostego:

$ docker attach {container id}
 3
Author: cig0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-01 05:00:51

Pierwszy {[6] } krok get container id:

docker ps

To pokaże ci coś w rodzaju

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[[4]} 1170fe9e9460 localhost: 5000 / python: env-7e847468c4d73a0f35e9c5164046ad88". / run_notebook.sh " 26 seconds ago Up 25 seconds 0.0.0.0: 8989 - >9999 / tcp SLURM_TASK-303337_0

1170fe9e9460 w tym przypadku jest to identyfikator kontenera.

Drugi , wpisz docker:

docker exec -it [container_id] bash

Tak więc w powyższym przypadku: docker exec -it 1170fe9e9460 bash

 3
Author: patapouf_ai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-24 18:04:23

Sposób "nsinit" to:

Zainstaluj nsinit

git clone [email protected]:dotcloud/docker.git
cd docker
make shell

Z wnętrza pojemnika:

go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit

Z zewnątrz:

docker cp id_docker_container:/go/bin/nsinit /root/

Użyj go

cd /var/lib/docker/execdriver/native/<container_id>/
nsinit exec bash
 2
Author: Ivailo Bardarov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-10 23:06:51

Uruchomiłem powershell na uruchomionym microsoft / iis run jako daemon using

docker exec -it <nameOfContainer> powershell
 1
Author: Ahmed Samir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-17 12:27:04
docker exec -t -i container_name /bin/bash

Zabierze cię do konsoli kontenerów.

 1
Author: Zemuldo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 11:37:03