Docker — мощный инструмент для упаковки, распространения и запуска приложений в изолированной среде. Однако для новичков порой бывает неочевидно, как правильно запускать контейнеры, особенно с различными опциями и параметрами. В этой статье мы подробно рассмотрим запуск контейнеров в интерактивном и фоновом режимах, разберем ошибки, возникающие при старте, и научимся работать с логами и процессами контейнеров.
Первый запуск контейнера: Ubuntu в интерактивном режиме
Самый простой способ запустить контейнер — использовать команду docker run
. Если образ ещё не загружен локально, Docker автоматически скачает его из Docker Hub.
docker run -it ubuntu
Здесь:
-i
— запуск в интерактивном режиме;-t
— создание псевдотерминала;ubuntu
— имя образа.
Вы оказываетесь в консоли, где работаете как пользователь root
.

Проверим, что действительно запущена Ubuntu:
cat /etc/*release | grep DISTRIB_DESCRIPTION
Пример вывода:
DISTRIB_DESCRIPTION="Ubuntu 24.04.2 LTS"
⚠️ Обратите внимание: команда
uname -a
покажет ядро хоста, так как контейнер использует его.
Именование контейнеров
Docker по умолчанию присваивает контейнеру случайное имя, например:
docker ps
NAMES
nostalgic_shtern
Вы можете задать своё имя с помощью опции --name
:
docker run -it --name myubuntu ubuntu
💡Интересный факт: случайные имена формируются из прилагательного и фамилии известного учёного (например, «frosty_neumann«).
Список запущенных контейнеров
Для отображения текущих активных контейнеров используйте:
docker ps
Чтобы увидеть все контейнеры, включая завершённые:
docker ps -a

Запуск в фоне: работа с демонами
Запустим контейнер с MySQL:
docker run -d mysql
Однако, если сразу посмотреть список:
docker ps
…контейнера может не оказаться. Почему? Он мог завершиться с ошибкой.
docker ps -a
Статус будет:
Exited (1)
Чтобы узнать причину:
docker logs frosty_neumann
Пример вывода:
2025-05-13 20:18:20+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of the following as an environment variable:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
Docker сообщает, что нужно передать переменную среды:
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=docker -d mysql
Подключение к работающему контейнеру
Используем docker exec
для запуска команд внутри уже работающего контейнера:
docker exec -it mysql-test bash
Вы окажетесь внутри контейнера MySQL:

docker exec
Анализ процессов внутри контейнера
Для визуального понимания структуры процессов внутри контейнера используем pstree
.
До подключения через exec
:
sudo pstree -p
├─containerd-shim(55206)─┬─mysqld(55225)─┬─mysqld(55362)
После:
├─containerd-shim(55206)─┬─bash(55477)
├─mysqld(55225)─┬─mysqld(55362)

Также можно использовать docker top
:
docker top mysql-test
Вывод покажет все процессы внутри контейнера.
Отладочный запуск без скрипта
Если вы хотите запустить контейнер и сразу получить доступ к командной строке, минуя начальный скрипт (docker-entrypoint.sh
), используйте:
docker run -it --name mysql-test2 -e MYSQL_ROOT_PASSWORD=docker mysql /bin/bash
Затем:
bash-5.1# cat $(which docker-entrypoint.sh)
Разница в инициализации
Одинаковые команды запускают контейнер с одним и тем же образом:
docker ps -a
COMMAND
"docker-entrypoint.sh"
Но pstree
покажет разную инициализацию:
- В
mysql-test
запускаетсяmysqld
как основной процесс. - В
mysql-test2
— толькоbash
, MySQL не запущен.
Заключение
Теперь вы знаете, как запускать Docker-контейнеры:
- в интерактивном режиме (
-it
); - в фоне (
-d
); - с именем (
--name
); - с переменными среды (
-e
); - с отладкой (
/bin/bash
вместо скрипта); - и как анализировать процессы (
pstree
,docker top
).
Docker — несложен, если понимать, как он работает «под капотом». Осваивайтесь, экспериментируйте и не бойтесь ошибок — именно так приходит опыт.
Дополнительный материал
Was this helpful?
0 / 0