Поиск…


Синтаксис

  • docker stats [ОПЦИИ] [КОНТЕЙНЕР ...]
  • докерные журналы [ОПЦИИ] КОНТЕЙНЕР
  • докерный верх [ОПЦИИ] КОНТЕЙНЕР [ps OPTIONS]

Вход в рабочий контейнер

Для выполнения операций в контейнере используйте команду docker exec . Иногда это называется «входом в контейнер», поскольку все команды выполняются внутри контейнера.

docker exec -it container_id bash

или же

docker exec -it container_id /bin/sh

И теперь у вас есть оболочка в вашем запущенном контейнере. Например, перечислите файлы в каталоге и выйдите из контейнера:

docker exec container_id ls -la

Вы можете использовать -u flag для входа в контейнер с определенным пользователем, например uid=1013 , gid=1023 .

docker exec -it -u 1013:1023 container_id ls -la

Uid и gid не должны существовать в контейнере, но команда может привести к ошибкам. Если вы хотите запустить контейнер и немедленно войти внутрь, чтобы что-то проверить, вы можете сделать

docker run...; docker exec -it $(docker ps -lq) bash

команда docker ps -lq выводит только идентификатор последнего (контейнера l -lq ). (это предполагает, что у вас есть bash как интерпретатор, доступный в вашем контейнере, у вас может быть sh или zsh или любой другой)

Мониторинг использования ресурсов

Проверка использования ресурсов системы - эффективный способ поиска неверных приложений. Этот пример является эквивалентом традиционной top команды для контейнеров:

docker stats

Чтобы следить за статистикой конкретных контейнеров, перечислите их в командной строке:

docker stats 7786807d8084 7786807d8085

Статистика Docker отображает следующую информацию:

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

По умолчанию docker stats отображает идентификатор контейнеров, и это не очень полезно, если вы предпочитаете отображать имена контейнера, просто выполните

docker stats $(docker ps --format '{{.Names}}')

Процессы мониторинга в контейнере

Проверка использования ресурсов системы - эффективный способ сузить проблему в реальном приложении. Этот пример является эквивалентом традиционной команды ps для контейнеров.

docker top 7786807d8084

Чтобы отфильтровать формат вывода, добавьте опции ps в командной строке:

docker top 7786807d8084 faux

Или, чтобы получить список процессов, выполняемых как root, что является потенциально опасной практикой:

docker top 7786807d8084 -u root

Команда docker top оказывается особенно полезной при поиске минималистических контейнеров без оболочки или команды ps .

Прикрепите к работающему контейнеру

«Присоединение к контейнеру» - это действие запуска терминального сеанса в контексте, в котором работает контейнер (и любые его программы). Это в основном используется для целей отладки, но может также потребоваться, если конкретные данные должны быть переданы программам, запущенным в контейнере.

Для этого используется команда attach . Он имеет этот синтаксис:

docker attach <container>

<container> может быть либо идентификатором контейнера, либо именем контейнера. Например:

docker attach c8a9cf1a1fa8

Или же:

docker attach graceful_hopper

Вы , возможно , потребуются sudo выше команда, в зависимости от пользователя и как докер устанавливаются.

Примечание. Attach only позволяет одновременно подключать один сеанс оболочки к контейнеру.

Предупреждение: все ввод клавиатуры будет отправлен в контейнер. Нажатие Ctrl-c убьет ваш контейнер.

Чтобы отсоединиться от прикрепленного контейнера, последовательно нажмите Ctrl-p, затем Ctrl-q

Чтобы подключить несколько сеансов оболочки к контейнеру или просто как альтернативу, вы можете использовать exec . Использование идентификатора контейнера:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

Использование имени контейнера:

docker exec -i -t graceful_hopper /bin/bash

exec запускает программу внутри контейнера, в этом случае /bin/bash (оболочка, предположительно одна из которых имеет контейнер). -i указывает на интерактивный сеанс, в то время как -t выделяет псевдо-TTY.

Примечание. В отличие от attach , нажатие Ctrl-c завершает команду exec 'd при запуске в интерактивном режиме.

Печать журналов

Следуя журналам, это менее навязчивый способ отладки в реальном времени приложения. В этом примере воспроизводится поведение традиционного tail -f some-application.log на контейнере 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

Эта команда в основном показывает стандартный вывод процесса контейнера (процесс с pid 1).

Если ваши журналы не включают в себя --timestamps метку, вы можете добавить флаг --timestamps .

Можно просмотреть журналы остановленного контейнера, либо

  • запустите неудачный контейнер с docker run ... ; docker logs $(docker ps -lq)

  • найти идентификатор или имя контейнера

docker ps -a

а потом

docker logs container-id или

docker logs containername

так как можно просмотреть журналы остановленного контейнера

Отладка процесса контейнера докеров

Docker - просто причудливый способ запуска процесса, а не виртуальная машина. Поэтому отладка процесса «в контейнере» также возможна «на хосте», просто исследуя выполняемый процесс контейнера как пользователя с соответствующими разрешениями для проверки этих процессов на хосте (например, root). Например, можно указать каждый «контейнерный процесс» на хосте, запустив простой ps как root:

sudo ps aux

Любые текущие контейнеры Docker будут перечислены в выводе.

Это может быть полезно при разработке приложений для отладки процесса, выполняющегося в контейнере. Как пользователь с соответствующими разрешениями, типичные утилиты отладки могут использоваться в контейнерном процессе, такие как strace, ltrace, gdb и т. Д.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow