Docker - tryb attached, detached i interactive

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 425 razy

Podczas uruchamiania instancji kontenera można było zauważyć, że w konsoli nie da się wprowadzać nowych poleceń. Dzieje się tak ponieważ uruchamiając instancję kontenera domyślnie uruchamiany jest on w trybie attached. W tym trybie konsola jest nie czuła na wprowadzanie zmian z linii poleceń i program uruchomiony w takiej instancji wyświetla różne informacje na temat swojego stanu, błędów i informacji jakie wypisywane są przez program w konsoli. Oto przykład:

docker run -p 8889:8888 --name node -v "${pwd}:/app" --rm node-api:1.0

> serwer-docker@1.0.0 start /app
> nodemon -L index.js

[nodemon] 2.0.16
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`

Co ciekawe po uruchomieniu instancji kontenera możliwe jest wyświetlenie logów związanych z daną instancją kontenera za pomocą polecenia:

docker container logs node

> serwer-docker@1.0.0 start /app
> nodemon -L index.js

[nodemon] 2.0.16
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`

Gdzie w tym przypadku node jest nazwą kontenera

Możliwe jest też uruchomienie kontenera w trybie ditached z opcją -d najpierw jednak trzeba zakończyć żywot poprzedniej instancji:

docker container stop node

Ponieważ kontener uruchomiłem z opcją --rm, która powoduje automatyczne usunięcie kontenera więc nie muszę się bawić w usuwanie go z listy. Teraz już z najdzikszą rozkoszą mogę się oddać przyjemności uruchomienia instancji kontenera w trybie detatch:

docker run -p 8889:8888 --name node -v "${pwd}:/app" --rm -d node-api:1.0
e0dde5567ae56169443d6ab39f27f5f117d7561dc76f4479ab8e8629b5f5d06e

Tym razem w tej samej konsoli można wpisywać inne polecenia. Co jednak gdyby ktoś chciał (nie mówię, że ty, nie przeczę, że ja) a więc gdyby ktoś chciał uruchomić jakieś polecenie wewnątrz kontenera, np żeby sprawdzić jakie pliki się dodały do kontenera i jaka jest ich zawartość. Gdyby tylko istniał jakiś spryty (żeby nie powiedzieć przebiegły) sposób na uruchomienie instancji kontenera tak, żeby można było takie cuda wyczyniać! Nie lękaj się! Albowiem oto okazuje się, że istnieje taki tryb zwany interaktywnym, który można wywołać przy pomocy opcji -it w następujący sposób:

docker run -p 8889:8888 --name node -v "${pwd}:/app" --rm -it node-api:1.0 

> serwer-docker@1.0.0 start /app
> nodemon -L index.js

[nodemon] 2.0.16
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.

Teraz, gdy w konsoli uruchomisz np. takie polecenie:

rs
[nodemon] starting `node index.js`

W tym przypadku możliwe będzie przeładowanie serwera.

Jeżeli zaś chcesz uruchamiać polecenia w prawdziwej konsoli instancji kontenera to:

docker exec -it node /bin/bash

W ten sposób można robić wszystko to, co w Linuks-owej konsoli, czyli np.:

lls
controllers  dockerfile  index.js  node_modules  package-lock.json  package.json  routes

Jeżeli w przebiegły sposób zainstalowałeś w obrazie Midnight Commander-a to możesz zrobić także i to:

mc

Co z kolei spowoduje wyświetlenie interfejsu z poniższego screena.

Docker - program Midnight Commander uruchomiony w instancji kontenera
Rys. 1
Program Midnight Commander uruchomiony w instancji kontenera
Propozycje książek