Как попасть в запущенный контейнер в Docker

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

Ответ

Для отладки и диагностики я регулярно подключаюсь к запущенным контейнерам. Основная команда для этого — docker exec.

Базовое подключение к контейнеру:

docker exec -it <container_name_or_id> /bin/bash

Или если в образе нет bash:

docker exec -it <container_name_or_id> /bin/sh

Практические примеры из моей работы:

  1. Проверка конфигурации Nginx:

    docker exec -it nginx-container cat /etc/nginx/nginx.conf
  2. Просмотр логов приложения в реальном времени:

    docker exec -it app-container tail -f /var/log/app.log
  3. Диагностика сетевых проблем:

    docker exec -it service-container apt-get update && apt-get install -y iputils-ping
    docker exec -it service-container ping database-host

Важные нюансы:

  • Контейнер должен быть запущен. Проверяю через docker ps.
  • Образ должен содержать оболочку. Для минимальных образов (scratch, alpine) может потребоваться установка.
  • Для однократного выполнения команды можно опустить флаги -it:
    docker exec container-name ps aux

Альтернативные подходы:

  • Если нужно копировать файлы, использую docker cp.
  • Для детальной инспекции контейнера — docker inspect.
  • В продакшн-среде Kubernetes для диагностики использую kubectl exec:
    kubectl exec -it pod-name -- /bin/bash

Безопасность: В продакшне ограничиваю использование docker exec и обеспечиваю, что образы для отладки не содержат чувствительных данных или инструментов, которые могут быть использованы злоумышленником.