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

Проверим, что действительно запущена Ubuntu:
Bash
cat /etc/*release | grep DISTRIB_DESCRIPTIONПример вывода:
INI
DISTRIB_DESCRIPTION="Ubuntu 24.04.2 LTS"⚠️ Обратите внимание: команда
uname -aпокажет ядро хоста, так как контейнер использует его.
Именование контейнеров
Docker по умолчанию присваивает контейнеру случайное имя, например:
Bash
docker ps
NAMES
nostalgic_shternВы можете задать своё имя с помощью опции --name:
Bash
docker run -it --name myubuntu ubuntu💡Интересный факт: случайные имена формируются из прилагательного и фамилии известного учёного (например, «frosty_neumann«).
Список запущенных контейнеров
Для отображения текущих активных контейнеров используйте:
Bash
docker psЧтобы увидеть все контейнеры, включая завершённые:
Bash
docker ps -a
Запуск в фоне: работа с демонами
Запустим контейнер с MySQL:
Bash
docker run -d mysqlОднако, если сразу посмотреть список:
Bash
docker ps…контейнера может не оказаться. Почему? Он мог завершиться с ошибкой.
Bash
docker ps -aСтатус будет:
SCSS
Exited (1)Чтобы узнать причину:
Bash
docker logs frosty_neumannПример вывода:
Bash
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_PASSWORDDocker сообщает, что нужно передать переменную среды:
Bash
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=docker -d mysqlПодключение к работающему контейнеру
Используем docker exec для запуска команд внутри уже работающего контейнера:
Bash
docker exec -it mysql-test bashВы окажетесь внутри контейнера MySQL:

docker execАнализ процессов внутри контейнера
Для визуального понимания структуры процессов внутри контейнера используем pstree.
До подключения через exec:
Bash
sudo pstree -p
├─containerd-shim(55206)─┬─mysqld(55225)─┬─mysqld(55362)После:
Bash
├─containerd-shim(55206)─┬─bash(55477)
├─mysqld(55225)─┬─mysqld(55362)
Также можно использовать docker top:
Bash
docker top mysql-testВывод покажет все процессы внутри контейнера.
Отладочный запуск без скрипта
Если вы хотите запустить контейнер и сразу получить доступ к командной строке, минуя начальный скрипт (docker-entrypoint.sh), используйте:
Bash
docker run -it --name mysql-test2 -e MYSQL_ROOT_PASSWORD=docker mysql /bin/bashЗатем:
Bash
bash-5.1# cat $(which docker-entrypoint.sh)Разница в инициализации
Одинаковые команды запускают контейнер с одним и тем же образом:
Bash
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 — несложен, если понимать, как он работает «под капотом». Осваивайтесь, экспериментируйте и не бойтесь ошибок — именно так приходит опыт.