Отлично, вот вы запустили контейнер и дошли до того, что необходимо проверить, что там вообще происходит внутри этого самого контейнера.

Для начала я запущу пару контейнеров, чтобы было над чем экспериментировать.

docker run --detach --name some-mariadb -e MARIADB_ROOT_PASSWORD=my-secret-pw mariadb:latest

docker run --detach --name some-nginx nginx:latest

Первая команда запускает контейнер с базой MariaDB и назначает пароль пользователю root (my-secret-pw).
Для того, чтобы узнать, какие переменные окружения для чего используются, можно перейти на страницу образа в Docker Hub и почитать о нём немного, например.

docker container ls
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS      NAMES
bdc2d2440db9   nginx:latest     "/docker-entrypoint.…"   5 minutes ago    Up 5 minutes    80/tcp     some-nginx
ca55f6abaa03   mariadb:latest   "docker-entrypoint.s…"   23 minutes ago   Up 23 minutes   3306/tcp   some-mariadb

docker container top (docker top)

Выполняя docker container top можно проверить запущенные процессы внутри контейнера, по аналогии с top в самой ОС.

docker container top some-nginx
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1950294             1950274             0                   16:49               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 1950338             1950294             0                   16:49               ?                   00:00:00            nginx: worker process

Логично, что в контейнере с Nginx запущены процессы с именем nginx. Теперь выполним то же самое для контейнера с MariaDB.

docker container top some-mariadb
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
systemd+            1950081             1950063             0                   16:31               ?                   00:00:00            mariadbd
  • UID — пользователь, от имени которого запущен процесс внутри контейнера;
  • PID — PID процесса в хостовой системе (тот, что виден в ps aux на хосте);
  • PPID — родительский процесс (обычно containerd-shim);
  • CMD — команда, запущенная внутри контейнера.

Тут довольно интересная графа PID. Дело в том, что в локальной системе, на которой установлен Docker, также создаётся процесс, как и в контейнере.

sudo ps -aux | grep mariadb
systemd+ 1950081  0.0  7.1 1093428 118860 ?      Ssl  16:31   0:00 mariadbd

Также можно отфильтровать поля, которые хочется видеть в выводе.

docker container top some-mariadb -eo pid,ppid,cmd
PID                 PPID                CMD
1950081             1950063             mariadbd

docker container inspect (docker inspect)

После того как контейнер создан, иногда бывает необходимо узнать о нём побольше — про его конфигурацию. Для этого используется команда docker container inspect. Команда docker container inspect — одна из самых полезных для диагностики и анализа контейнеров.

docker container inspect some-mariadb

Но вывод этой команды будет большим и поэтому показывать этот вывод тут не имеет никакого смысла. Она выводит всю внутреннюю информацию о контейнере в формате JSON. Стало быть можно использовать jq для парсинга вывода, но проще сразу использовать --format в самой команде.

Ниже оставлю наиболее популярные шаблоны docker inspect -fкоторые чаще всего используют DevOps-инженеры.

  • Показать IP контейнера
docker inspect -f '{{ .NetworkSettings.IPAddress }}' some-mariadb
  • Показать путь к логам
    docker inspect -f '{{ .LogPath }}' some-mariadb
    
  • Показать порты, проброшенные на хост
    docker inspect -f '{{ range .Mounts }}{{ .Source }} -> {{ .Destination }}{{ println }}{{ end }}' some-mariadb
    
  • Имя образа, из которого запущен контейнер
    docker inspect -f '{{ .Config.Image }}' some-mariadb
    
  • Команда, с которой контейнер был запущен
    docker inspect -f '{{ .Path }} {{ .Args }}' some-mariadb
    
  • Время запуска контейнера
    docker inspect -f '{{ .State.StartedAt }}' some-mariadb
    
  • Текущий статус контейнера
    docker inspect -f '{{ .State.Status }}' some-mariadb
    
  • Показать смонтированные каталоги
    docker inspect -f '{{ range .Mounts }}{{ .Source }} -> {{ .Destination }}{{ println }}{{ end }}' some-mariadb
    

docker container stats

Теперь перейдём к мониторингу, к вещи о которой все обычно вспоминают когда что-то выполняется настолько долго что уже всем это надоело. Команда docker container stats — это мониторинг в реальном времени. Она показывает ресурсы, которые потребляют контейнеры.

docker stats some-mariadb
CONTAINER ID   NAME           CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O     PIDS
ca55f6abaa03   some-mariadb   0.00%     91.44MiB / 3.499GiB   2.55%     1.37kB / 0B   20MB / 53MB   9
  • CONTAINER ID / NAME - Идентификатор или имя контейнера
  • CPU % - Средняя загрузка CPU контейнера относительно всех яде
  • MEM USAGE / LIMIT - Используемая и лимитированная память
  • MEM % - Процент от лимита
  • NET I/O - Сетевой ввод/вывод (RX / TX)
  • BLOCK I/O - Дисковый ввод/вывод (чтение/запись на блочном уровне)
  • PIDS - Количество процессов внутри контейнера

Можно также выполнить команду docker stats без указания контейнера чтобы получить статистику всех запущенных контейнеров.

Ниже оставлю наиболее популярные шаблоны docker inspect -f которые чаще всего используются.

  • однократный вывод
    docker stats --no-stream some-mariadb
    
  • красивое форматирование
    docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}" some-mariadb
    
  • только CPU и память всех контейнеров
    docker stats --format "{{.Name}}: CPU {{.CPUPerc}} | MEM {{.MemUsage}}"
    
  • вывод в формате json
    docker stats --no-stream --format "{{json .}}" some-mariadb
    

docker container logs

Ну и еще одна полезная команда docker container logs, которая покажет логи контейнера. Очень часто бывает так что контейнер не стартует после запуска, например если в качестве параметра не передать необходимые переменные.

docker container logs some-mariadb
2025-10-21 10:31:48 0 [Note] Server socket created on IP: '0.0.0.0', port: '3306'.
2025-10-21 10:31:48 0 [Note] Server socket created on IP: '::', port: '3306'.
2025-10-21 10:31:48 0 [Note] mariadbd: Event Scheduler: Loaded 0 events
2025-10-21 10:31:48 0 [Note] mariadbd: ready for connections.
  • Cледить за логами в реальном времени
    docker container logs -f some-mariadb
    
  • Логи за последние 10 минут
    docker container logs --since 10m some-mariadb
    
  • Последние 100 строк
    docker container logs --tail 100 some-mariadb