
Подключение к работающему Docker-контейнеру полезно, когда вы хотите увидеть, что происходит внутри него. Если Docker-контейнер работает не так, как ожидалось, вы можете подключиться к нему или открыть оболочку для контейнера и выполнить команды, например, ps или top . Вы также можете войти в контейнер, установить новые пакеты и собрать из него новый образ Docker .
В этом уроке мы объясним, как подключиться к основному работающему процессу контейнера и как получить оболочку для работающего контейнера.
Прикрепить к контейнеру
Хотя в контейнере можно запускать несколько процессов, большинство 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 выделить псевдо-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 подключает терминал к работающему контейнеру.
Если у вас есть вопросы, пожалуйста, оставьте комментарий ниже.
Связанные руководства
- Как установить и использовать Docker Compose в Debian 10 Linux
- Команда Docker Run с примерами
- Как составить список контейнеров в Docker
- Как установить и использовать Docker в Debian 10 Linux
- Как установить и использовать Docker на Raspberry Pi
- Как создавать образы Docker с помощью Dockerfile
- Как установить Docker Compose в Ubuntu 20.04