ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

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

Установить Docker 1.11 на Ubuntu 16.04 LTS x64

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

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

 

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

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

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

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

 

Параметр -p 8080:80 указывает докеру привязать порт 8080 контейнера к порту 80 на главной машине.

Перечислите контейнеры, чтобы убедиться, что выполняется контейнер ” my_nginx:

docker container ls

 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8e1c4974a8d8        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 2 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 останавливает контейнер.

Если запущенные процессы, которые вы прикрепляете к accepts input, вы можете отправить ему инструкции.

 

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

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

docker container run --name my_mysql -d mysql

 

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

Для выполнения команды внутри контейнера выполните следующую команду:

docker container exec -it my_mysql ls /var

 

Параметр -i означает интерактивный и -t указывает докеру выделить псевдо-устройство 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=e0214d97e0fe
MYSQL_ROOT_PASSWORD=my-secret-pw
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 присоединяет ваш терминал к работающему контейнеру.

Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.

Exit mobile version