Linux

Docker run: полное руководство по запуску контейнеров в Linux

В этом гайде выlearn основы команды docker run — ключевого инструмента для запуска контейнеров Docker. Мы разберём синтаксис, основные флаги и приведём рабочие примеры для быстрого старта.

Обновлено 16 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Docker 20.10+Ubuntu 20.04/22.04Debian 11/12CentOS 8/Rocky 9

Введение / Зачем это нужно

Команда docker run — это основной инструмент для запуска контейнеров Docker. Она берёт Docker-образ, создаёт из него новый контейнер и запускает его с заданными параметрами. Понимание этой команды — первый и самый важный шаг в работе с Docker. После прохождения этого гайда вы сможете уверенно запускать контейнеры с веб-серверами, базами данных или любым другим ПО, настраивать сеть, хранилище и интерактивный доступ.

Требования / Подготовка

Перед началом убедитесь, что:

  1. Docker Engine установлен и работает. Проверьте командой docker --version. Результат должен показывать версию 20.10 или новее.
  2. Ваш пользователь имеет права на управление Docker. Обычно это требует membership в группе docker. Проверьте groups $USER. Если группы docker нет, добавьте пользователя (sudo usermod -aG docker $USER) и перелогиньтесь.
  3. Вы можете загружать образы из Docker Hub. Для публичных образов (как nginx, ubuntu) это работает по умолчанию.

Пошаговая инструкция

Шаг 1: Базовый синтаксис и запуск тестового контейнера

Самый простой вызов команды: docker run <имя_образа>. Docker проверит наличие образа локально. Если его нет — автоматически загрузит (pull) с Docker Hub, создаст контейнер и запустит команду по умолчанию, указанную в Dockerfile образа.

# Запуск официального тестового образа
docker run hello-world

Что произошло: Docker загрузил образ hello-world, запустил его. Контейнер выполнил свою задачу (вывод приветствия) и остановился.

Шаг 2: Интерактивный запуск и работа в контейнере

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

# Запуск образа Ubuntu и вход в оболочку bash
docker run -it ubuntu:22.04 bash

Что произошло:

  • -it — вы подключились к контейнеру.
  • ubuntu:22.04 — конкретная версия образа.
  • bash — команда, которую нужно выполнить внутри контейнера (переопределяет CMD из образа).

Вы окажетесь в командной строке внутри контейнера. Чтобы выйти, наберите exit. Контейнер остановится.

Шаг 3: Работа в фоновом режиме и проброс портов

Часто контейнеры (веб-серверы, БД) нужно запускать в фоне (detached). Ключевой флаг -d. Для доступа к сервису из хоста нужен проброс портов -p.

# Запуск Nginx в фоне, проброс порта 8080 хоста -> 80 контейнера
docker run -d -p 8080:80 --name my-nginx nginx:latest

Разбор флагов:

  • -d — запуск в фоновом режиме (возвращает ID контейнера).
  • -p 8080:80 — проброс портов: хостовый_порт:порт_в_контейнере.
  • --name my-nginx — задаёт удобное имя контейнеру (вместо случайного ID).
  • nginx:latest — образ для запуска.

Теперь Nginx работает в контейнере. Откройте в браузере http://localhost:8080 — вы увидите стартовую страницу Nginx.

💡 Совет: Для проброса всех портов контейнера на случайные порты хоста используйте -P (заглавная P).

Шаг 4: Монтирование томов и управление данными

По умолчанию данные внутри контейнера исчезают после его удаления. Чтобы сохранять файлы на хосте или делиться ими между контейнерами, используйте тома (volumes) или bind mounts.

# Запуск контейнера с монтированием текущей директории хоста в /app контейнера
docker run -it -v "$(pwd)":/app ubuntu:22.04 bash

Что произошло: Директория, в которой вы выполнили команду на хосте, теперь доступна внутри контейнера по пути /app. Все изменения в /app будут видны и на хосте, и после перезапуска контейнера.

Шаг 5: Управление жизненным циклом контейнера

docker run создаёт и запускает новый контейнер. Если контейнер уже существует (остановленный), используйте docker start/docker stop.

# Остановка запущенного контейнера по имени
docker stop my-nginx

# Запуск остановленного контейнера (с теми же параметрами)
docker start my-nginx

# Просмотр всех контейнеров (включая остановленные)
docker ps -a

# Удаление остановленного контейнера
docker rm my-nginx

⚠️ Важно: Удаление контейнера (rm) не удаляет образ, из которого он был создан. Образы управляются отдельно (docker image rm).

Проверка результата

  1. Контейнер запущен: Выполните docker ps. В списке должны быть активные контейнеры (например, my-nginx).
  2. Сервис доступен: Для веб-сервера откройте указанный в -p порт в браузере (http://localhost:8080). Для БД проверьте подключение локально.
  3. Данные сохраняются: Если вы монтировали том, создайте файл внутри контейнера (touch /app/test.txt) и проверьте его наличие в соответствующей директории на хосте.
  4. Логи контейнера: Просмотрите логи на предмет ошибок: docker logs <имя_или_id_контейнера>.

Возможные проблемы

ПроблемаПричинаРешение
Got permission denied while trying to connect to the Docker daemon socketПользователь не в группе docker.Выполните sudo usermod -aG docker $USER, выйдите из сессии и зайдите заново.
Unable to find image '<image>:latest' locally и последующая ошибка pull access deniedОшибка в имени образа или нет доступа к приватному репозиторию.Проверьте имя образа на Docker Hub. Для приватных репозиториев выполните docker login.
Порт уже занят (Bind for 0.0.0.0:8080 failed: port is already allocated)На хосте уже запущен процесс, слушающий порт 8080.Остановите конфликтующий процесс (sudo lsof -i :8080), или используйте другой порт хоста (-p 8081:80).
Контейнер сразу останавливаетсяОсновной процесс внутри контейнера завершился.Запустите контейнер в интерактивном режиме (-it) с долгоживущей командой (например, bash), чтобы остаться внутри и диагностировать проблему.
Файлы не сохраняются после удаления контейнераТом не был явно объявлен (-v) или это был анонимный volume, привязанный к удалённому контейнеру.Всегда монтируйте внешние тома для важных данных. Удаляйте только контейнер (docker rm), не затрагивая тома (docker volume ls).
# Пример диагностики: запуск оболочки в уже созданном контейнере (если он остановился)
docker run -it --rm --entrypoint sh <image_name>

Часто задаваемые вопросы

В чём разница между `docker run` и `docker create`?
Как сделать так, чтобы контейнер работал в фоне?
Что делает флаг `--rm` и когда его использовать?
Как открыть порт контейнера для доступа с хоста?

Полезное

Проверка установки Docker
Базовый синтаксис команды
Запуск простого контейнера
Запуск с флагами (практические примеры)
Управление запущенными контейнерами

Эта статья помогла вам решить проблему?