Подключение к работающему контейнеру 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 сопоставить порт 80 в контейнере с портом 8080 на хост-машине.
Перечислите контейнеры, чтобы убедиться, что контейнер «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
останавливает контейнер.
Если запущенные процессы, к которым вы присоединяетесь, принимают ввод, вы можете отправить ему инструкции.
Перенести снаряд в контейнер
Команда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 выделить устройство псевдо-телетайпа. Команда 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
прикрепляет ваш терминал к работающему контейнеру.
Если у вас есть вопросы, оставьте комментарий ниже.