Как подключиться к контейнеру Docker

12 set 2022 3 min di lettura
Как подключиться к контейнеру Docker
Indice dei contenuti

Введение

Подключение к работающему контейнеру Docker полезно, если вы хотите увидеть, что происходит внутри контейнера. Если контейнер Docker не работает должным образом, вы можете подключиться к контейнеру или получить оболочку контейнера и запустить такие команды, как ps или top, установить новые пакеты и т. д.

В этом руководстве мы объясним, как подключиться к основному запущенному процессу контейнера и как получить оболочку в работающем контейнере.

Подключиться к контейнеру

Хотя вы можете запускать несколько процессов в контейнере, большинство контейнеров Docker запускают только один процесс. Команда, которая выполняется при запуске контейнера, указывается с помощью оператора ENTRYPOINT и/или RUN.

Команда docker attach подключает терминал к запущенному контейнеру. Это полезно, когда вы хотите видеть, что написано в стандартном выводе в режиме реального времени, или управлять процессом в интерактивном режиме.

Чтобы лучше понять, как работает команда attach, давайте запустим новый отдельный контейнер Nginx, используя официальный образ Nginx.

docker container run --name my_nginx -d -p 8080:80 nginx

Параметр -p 8080: 80 указывает Docker сопоставить порт 8080 контейнера с портом 80 на хост-компьютере.

Перечислите контейнеры, чтобы убедиться, что контейнер « my_nginx » запущен:

docker container ls

Вы должны получить выходное сообщение, подобное следующему:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 37dh4dh47mlk nginx "nginx -g 'daemon of…" 5 minutes ago Up 6 seconds 0.0.0.0:8080->80/tcp my_nginx

Присоединитесь к контейнеру, используя идентификатор или имя контейнера:

docker container attach my_nginx

Команда изображения nginx по умолчанию, которая запускается при запуске контейнера, имеет значение CMD ["nginx", "-g", "daemon off;"]. Когда вы запускаете команду attach, терминал подключается к процессу nginx.

Откройте адрес 127.0.0.1:8080 в своем браузере и посмотрите вывод процесса nginx в режиме реального времени.

192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET /HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
 192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Чтобы получить доступ к журналам контейнера, мы рекомендуем использовать команду docker logs.

Чтобы выйти из контейнера, не останавливая его, используйте комбинацию клавиш CTRL-p CTRL-q. Нажатие CTRL-c останавливает контейнер.

Нести ракушку в контейнере

Команда docker exec позволяет выполнять команды внутри запущенного контейнера.

Чтобы увидеть, как это работает и как использовать команду exec, запустите новый контейнер. Мы будем использовать официальный образ MySQL:

docker container run --name my_mysql -d mysql

Это создаст контейнер с именем « my_mysql ».

Чтобы запустить команду внутри контейнера, выполните следующую команду:

docker container exec -it my_mysql ls /var

Параметр -i означает интерактивный, а -t указывает Docker выделить псевдоустройство TTY. Команда ls выведет список всех файлов и каталогов в каталоге /var контейнера:

backups cache lib local lock log mail opt run spool tmp

Чтобы получить оболочку в контейнер, то есть войти в контейнер, запустите новую сессию оболочки, запустив двоичный файл оболочки. Вы можете использовать sh, bash или любую другую оболочку, включенную в образ.

Следующая команда создаст новую сессию Bash внутри контейнера:

docker container exec -it my_mysql /bin/bash

Командная строка изменится, показывая, что вы сейчас работаете с оболочкой контейнера.

Отсюда вы можете запускать команды, как и на любом другом сервере Linux. Например, чтобы получить список текущих переменных среды, введите env:

env

Вывод будет выглядеть следующим образом:

HOSTNAME=r847dj4hb9fr
 MYSQL_ROOT_PASSWORD=secret
 PWD=/HOME=/root
 MYSQL_MAJOR=8.0
 GOSU_VERSION=1.7
 MYSQL_VERSION=8.0.17-1debian9
 TERM=xterm
 SHLVL=1
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 _=/usr/bin/env

Вывод

Команды docker exec и docker attach позволяют подключаться к запущенному контейнеру. Чтобы получить интерактивную оболочку в контейнере, используйте команду exec для запуска нового сеанса оболочки. Команда attach подключает терминал к запущенному контейнеру.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.