Как получить доступ к командной строке запущенного Docker-контейнера

«Как получить доступ к командной строке запущенного Docker-контейнера» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для интерактивного доступа к командной строке (шеллу) уже запущенного контейнера используется команда docker exec.

Основной способ: docker exec

Эта команда запускает новый процесс внутри работающего контейнера. Это самый частый и безопасный способ для отладки или выполнения команд.

  • -i (--interactive): Позволяет взаимодействовать с процессом (передавать ввод).
  • -t (--tty): Выделяет псевдо-терминал, делая сессию похожей на обычную SSH-сессию.

Примеры:

# Запустить интерактивную сессию bash в контейнере
docker exec -it my_container_name /bin/bash

# Если в образе нет bash, попробуйте sh (например, в Alpine)
docker exec -it my_container_name /bin/sh

Альтернатива: docker attach

Эта команда подключается к основному процессу (PID 1), запущенному в контейнере. Используйте её с осторожностью: если вы выйдете из этого процесса (например, через Ctrl+C), контейнер может остановиться.

# Подключиться к главному процессу контейнера
docker attach my_container_name

Ключевое различие:

  • exec: Создает новую сессию, не влияя на основной процесс. Идеально для отладки.
  • attach: Подключается к существующему главному процессу. Полезно для наблюдения за логами или интерактивными приложениями.