Как использовать команду docker container attach для взаимодействия с работающими контейнерами

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь использовать команду docker container attach для взаимодействия с работающими контейнерами. Вы запустите контейнеры в detached-режиме (фоновом режиме), подключитесь к ним для наблюдения за их выводом и отключитесь, используя стандартную комбинацию клавиш.

Вы также изучите подключение к контейнерам с включенным TTY (терминалом) и узнаете, как переопределить стандартную комбинацию клавиш для отключения, чтобы обеспечить большую гибкость при работе с Docker-контейнерами.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555103{{"Как использовать команду docker container attach для взаимодействия с работающими контейнерами"}} docker/ps -.-> lab-555103{{"Как использовать команду docker container attach для взаимодействия с работающими контейнерами"}} docker/attach -.-> lab-555103{{"Как использовать команду docker container attach для взаимодействия с работающими контейнерами"}} docker/pull -.-> lab-555103{{"Как использовать команду docker container attach для взаимодействия с работающими контейнерами"}} end

Запуск контейнера в detached-режиме с простой командой

На этом шаге вы узнаете, как запустить Docker-контейнер в detached-режиме (фоновом режиме). В этом режиме контейнер работает в фоне, и Docker CLI не подключается к его стандартным потокам ввода, вывода или ошибок. Это полезно для долго работающих сервисов или приложений.

Мы будем использовать образ ubuntu для выполнения простой команды, которая выводит сообщение и завершает работу. Сначала загрузим образ ubuntu, чтобы убедиться, что он доступен локально.

docker pull ubuntu

Теперь запустим контейнер в detached-режиме с помощью команды docker run с флагом -d. Мы выполним простую команду echo, которая выводит "Hello from detached container!" и завершает работу.

docker run -d ubuntu echo "Hello from detached container!"

После выполнения команды Docker выведет ID контейнера. Это означает, что контейнер был запущен в detached-режиме. Вы можете проверить статус контейнера (или завершение его задачи) с помощью команды docker ps -a, которая показывает все контейнеры, включая завершенные.

docker ps -a

Вы должны увидеть запись о только что запущенном контейнере. В колонке STATUS будет указано, работает ли контейнер или завершил работу. Поскольку наша команда очень короткая, контейнер, скорее всего, уже завершит работу к моменту выполнения docker ps -a.

Подключение к работающему контейнеру и наблюдение за его выводом

На предыдущем шаге мы запустили контейнер в detached-режиме. Хотя контейнер выполнил простую команду и, вероятно, быстро завершил работу, мы всё равно можем подключиться к нему, чтобы увидеть его вывод. Команда docker attach позволяет подключиться к стандартным потокам ввода, вывода и ошибок работающего или завершившего работу контейнера.

Сначала получим ID контейнера, который мы запустили на предыдущем шаге. Используйте команду docker ps -a и найдите контейнер с командой echo. Скопируйте ID контейнера.

docker ps -a

Теперь используйте команду docker attach с указанием ID контейнера для подключения.

docker attach <container_id>

Замените <container_id> на фактический ID вашего контейнера. Поскольку контейнер выполнил простую команду echo и завершил работу, вы можете не увидеть вывод сразу или увидеть сообщение "Hello from detached container!", если вывод всё ещё буферизирован. Команда attach подключит вас к потокам контейнера. Так как контейнер уже завершил свою задачу, команда attach, скорее всего, сразу же отключится после подключения.

Чтобы продемонстрировать подключение к работающему контейнеру, давайте запустим новый контейнер в detached-режиме, который будет работать несколько секунд. Снова используем образ ubuntu с командой sleep 10.

docker run -d ubuntu sleep 10

Получите ID этого нового контейнера с помощью docker ps. На этот раз контейнер должен быть в состоянии Up.

docker ps

Теперь подключитесь к этому работающему контейнеру, используя его ID.

docker attach <new_container_id>

Замените <new_container_id> на ID контейнера с командой sleep 10. Вы подключитесь к стандартным потокам контейнера. Поскольку команда sleep не генерирует вывод, вы ничего не увидите. Терминал будет ожидать. Контейнер проработает 10 секунд, после чего завершится. Когда контейнер завершит работу, команда attach также завершится, вернув вас к приглашению терминала.

Отключение от контейнера с использованием стандартной комбинации клавиш

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

Давайте запустим новый контейнер в detached-режиме с более длительным временем работы, чтобы у вас была возможность попрактиковаться в отключении. Используем образ ubuntu с командой sleep 60.

docker run -d ubuntu sleep 60

Получите ID этого нового контейнера с помощью docker ps.

docker ps

Теперь подключитесь к этому работающему контейнеру, используя его ID.

docker attach <container_id>

Замените <container_id> на ID контейнера с командой sleep 60. Теперь вы подключены к контейнеру. Чтобы отключиться от контейнера и вернуться в терминал без остановки контейнера, нажмите следующую комбинацию клавиш:

  1. Нажмите и удерживайте клавишу CTRL, затем нажмите клавишу p. Отпустите обе клавиши.
  2. Нажмите и удерживайте клавишу CTRL, затем нажмите клавишу q. Отпустите обе клавиши.

После нажатия CTRL+p, затем CTRL+q вы должны вернуться в командную строку терминала. Контейнер продолжит работу в фоновом режиме. Вы можете проверить, что контейнер всё ещё работает, с помощью команды docker ps.

docker ps

В списке должен отображаться контейнер с командой sleep 60 и статусом Up.

Запуск еще одного контейнера в detached-режиме с включенным TTY

На этом шаге мы запустим еще один контейнер в detached-режиме, но на этот раз включим для него псевдо-TTY (терминал). Включение TTY часто необходимо, когда требуется взаимодействовать с оболочкой контейнера или выполнять команды, ожидающие терминального окружения.

Мы используем команду docker run с флагом -d для detached-режима и флагом -t для выделения псевдо-TTY. Запустим простую команду, которая поддерживает работу контейнера, например sleep 60.

docker run -d -t ubuntu sleep 60

Флаг -t выделяет псевдо-TTY - виртуальный терминал, позволяющий взаимодействовать с контейнером, как с физическим терминалом. Хотя контейнер работает в detached-режиме (-d), наличие TTY важно для интерактивных процессов или когда планируется последующее подключение к контейнеру с терминальным окружением.

После выполнения команды Docker снова выведет ID контейнера, указывая, что контейнер запущен в detached-режиме с TTY. Вы можете проверить состояние контейнера с помощью docker ps.

docker ps

В списке должен отображаться новый контейнер со статусом Up. Запомните ID контейнера - он понадобится на следующем шаге для подключения к этому контейнеру.

Подключение к контейнеру с TTY и отключение с использованием стандартной комбинации клавиш

На предыдущем шаге мы запустили контейнер в detached-режиме с включенным TTY. Теперь мы подключимся к этому контейнеру и потренируемся отключаться с помощью стандартной комбинации клавиш (CTRL+p, затем CTRL+q). Подключение к контейнеру с TTY позволяет работать в интерактивном режиме, даже если изначальная команда не требует взаимодействия.

Сначала получите ID контейнера, который вы запустили на предыдущем шаге с командой sleep 60 и включенным TTY.

docker ps

Найдите ID контейнера ubuntu, выполняющего команду sleep 60.

Теперь подключитесь к этому контейнеру с помощью команды docker attach, указав его ID.

docker attach <container_id>

Замените <container_id> на фактический ID вашего контейнера. Теперь вы подключены к стандартным потокам контейнера, и благодаря включенному TTY у вас есть терминальный интерфейс. Хотя команда sleep не требует взаимодействия, вы подключены к виртуальному терминалу контейнера.

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

  1. Нажмите и удерживайте клавишу CTRL, затем нажмите клавишу p. Отпустите обе клавиши.
  2. Нажмите и удерживайте клавишу CTRL, затем нажмите клавишу q. Отпустите обе клавиши.

Вы должны вернуться в командную строку терминала. Контейнер продолжит работу в фоновом режиме до завершения команды sleep 60. Вы можете проверить, что контейнер всё ещё работает, с помощью команды docker ps.

docker ps

В списке должен отображаться контейнер с командой sleep 60 и статусом Up.

Подключение к контейнеру с изменением комбинации клавиш для отключения

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

Мы будем использовать команду docker attach с флагом --detach-keys для указания другой комбинации клавиш. Формат флага --detach-keys - sequence, где sequence представляет собой строку с комбинациями клавиш, разделёнными запятыми. Например, ctrl-a,ctrl-d установит последовательность отключения как CTRL+a, затем CTRL+d.

Сначала запустим новый контейнер в detached-режиме с включенным TTY, который будет работать некоторое время.

docker run -d -t ubuntu sleep 60

Получим ID этого нового контейнера с помощью docker ps.

docker ps

Теперь подключимся к этому контейнеру, но на этот раз укажем другую комбинацию клавиш для отключения с помощью флага --detach-keys. Используем ctrl-a,d в качестве новой последовательности. Это означает, что для отключения нужно будет нажать CTRL+a, затем d.

docker attach --detach-keys="ctrl-a,d" <container_id>

Замените <container_id> на фактический ID вашего контейнера. Теперь вы подключены к контейнеру. Чтобы отключиться с использованием новой комбинации:

  1. Нажмите и удерживайте клавишу CTRL, затем нажмите клавишу a. Отпустите обе клавиши.
  2. Нажмите клавишу d.

Вы должны вернуться в командную строку терминала. Контейнер продолжит работу в фоновом режиме. Вы можете проверить, что контейнер всё ещё работает, с помощью команды docker ps.

docker ps

В списке должен отображаться контейнер с командой sleep 60 и статусом Up.

Итоги

В этой лабораторной работе вы научились запускать Docker-контейнер в detached-режиме с помощью команды docker run -d, что позволяет контейнерам работать в фоновом режиме без подключения к терминалу. Затем вы попрактиковались в использовании команды docker attach для подключения к стандартным потокам работающего или завершённого контейнера, чтобы наблюдать его вывод.

Кроме того, вы изучили, как отключаться от подключённого контейнера с помощью стандартной комбинации клавиш (CTRL+p CTRL+q), и как меняется поведение docker attach при запуске контейнера с включённым TTY (-t). В завершение вы узнали, как переопределить стандартную комбинацию клавиш для отключения при подключении к контейнеру, что обеспечивает гибкость в управлении взаимодействием с контейнерами.