← Назад к вопросам

Какие параметры можно использовать при запуске Docker контейнера?

2.2 Middle🔥 251 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Параметры при запуске Docker контейнера

Я регулярно работаю с Docker при разработке и развертывании приложений. Знаю основные параметры и флаги, которые используются при запуске контейнеров.

Базовая команда

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Основные параметры

1. Управление контейнером

# -d, --detach
# Запустить контейнер в фоновом режиме
docker run -d nginx

# -i, --interactive
# Держать STDIN открытым даже без подключенного терминала
docker run -i ubuntu bash

# -t, --tty
# Выделить pseudo-TTY (терминал)
docker run -it ubuntu bash  # -it = интерактивный режим

# --name
# Присвоить имя контейнеру
docker run --name my_app -d nginx

# --rm
# Автоматически удалить контейнер при выходе
docker run --rm ubuntu echo "Hello"

2. Переменные окружения

# -e, --env
# Установить переменные окружения
docker run -e DB_HOST=localhost -e DB_PORT=5432 myapp

# --env-file
# Загрузить переменные из файла
docker run --env-file .env myapp

# Пример .env файла
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin

3. Проксирование портов

# -p, --publish
# Проксировать порты: -p [host_port]:[container_port]
docker run -p 8080:80 nginx
# Локальный порт 8080 -> контейнер порт 80

# Разные protocoles
docker run -p 8000:8000/tcp -p 8001:8001/udp myapp

# Случайный порт хоста
docker run -p :8000 myapp  # Автоматически выберет портель

# Привязка к конкретному IP
docker run -p 127.0.0.1:8080:80 nginx

# -P, --publish-all
# Проксировать все exposed порты
docker run -P myapp

4. Подключение томов (volumes)

# -v, --volume
# Подключить директорию хоста в контейнер
docker run -v /host/path:/container/path myapp

# С разрешениями (ro = read-only)
docker run -v /host/path:/container/path:ro myapp

# Именованный том
docker run -v my_volume:/container/path myapp

# --mount (более гибкий способ)
docker run --mount type=bind,source=/host/path,target=/container/path myapp
docker run --mount type=volume,source=my_volume,target=/container/path myapp

# Несколько томов
docker run -v /host/path1:/container/path1 -v /host/path2:/container/path2 myapp

5. Ресурсы процессора и памяти

# -m, --memory
# Лимит памяти
docker run -m 512m myapp

# --memory-swap
# Лимит swap памяти (по умолчанию -m и --memory-swap одинаковы)
docker run -m 512m --memory-swap 1g myapp

# --cpus
# Лимит CPU (1.0 = 1 ядро)
docker run --cpus 2 myapp

# --cpuset-cpus
# Зафиксировать контейнер на определенных ядрах
docker run --cpuset-cpus 0,1 myapp

# --memory-reservation
# Мягкий лимит (не гарантированный)
docker run --memory-reservation 256m myapp

6. Сетевые параметры

# --network
# Выбрать сетевой драйвер
docker run --network bridge myapp     # По умолчанию
docker run --network host myapp       # Использовать сеть хоста
docker run --network none myapp       # Без сети
docker run --network my_network myapp # Пользовательская сеть

# --hostname
# Установить hostname контейнера
docker run --hostname myapp myapp

# --link (deprecated, используй networks)
# Связать с другим контейнером
docker run --link db:db myapp

# --dns
# Установить DNS серверы
docker run --dns 8.8.8.8 --dns 8.8.4.4 myapp

# --expose
# Expose порты (не проксирует, только документирует)
docker run --expose 5000 myapp

7. Монтирование файловых систем

# --tmpfs
# Создать tmp файловую систему в памяти
docker run --tmpfs /tmp:size=100m myapp

# --read-only
# Сделать корневую файловую систему read-only
docker run --read-only myapp

8. Работающий процесс

# --user
# Запустить от конкретного пользователя
docker run --user nobody myapp
docker run --user 1000 myapp  # По UID

# --workdir
# Установить рабочую директорию
docker run --workdir /app myapp

# --entrypoint
# Переопределить ENTRYPOINT
docker run --entrypoint /bin/bash myapp -c "echo hello"

# COMMAND
# Переопределить CMD
docker run myapp python script.py

9. Переменные и метаданные

# --label
# Добавить метаданные
docker run --label version=1.0 --label env=prod myapp

# --restart
# Политика перезагрузки
docker run --restart no myapp           # Не перезагружать
docker run --restart always myapp       # Всегда перезагружать
docker run --restart unless-stopped myapp  # Пока не остановлен
docker run --restart on-failure myapp   # При неудачном выходе
docker run --restart on-failure:5 myapp # Максимум 5 попыток

10. Логирование

# --log-driver
# Выбрать драйвер логирования
docker run --log-driver json-file myapp
docker run --log-driver syslog myapp

# --log-opt
# Опции логирования
docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 myapp

11. Привилегии и безопасность

# --privileged
# Дать расширенные привилегии
docker run --privileged myapp

# --cap-add, --cap-drop
# Добавить/удалить capabilities
docker run --cap-add SYS_ADMIN myapp
docker run --cap-drop ALL myapp

# --security-opt
# Опции безопасности
docker run --security-opt no-new-privileges myapp

12. Здоровье контейнера

# --health-cmd
# Команда для проверки здоровья
docker run --health-cmd="curl localhost" myapp

# --health-interval
# Интервал между проверками
docker run --health-interval=10s myapp

# --health-timeout
# Timeout проверки
docker run --health-timeout=5s myapp

# --health-retries
# Количество неудачных проверок перед unhealthy
docker run --health-retries=3 myapp

Практический пример

# Запуск Python приложения с полным набором параметров
docker run \
  --name myapp \
  -d \
  -p 8000:8000 \
  -e DEBUG=false \
  -e DB_HOST=db \
  --env-file .env \
  -v $(pwd)/src:/app/src \
  -v logs:/app/logs \
  --network myapp_network \
  --link db:db \
  -m 512m \
  --cpus 1 \
  --restart unless-stopped \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  --health-cmd="curl -f http://localhost:8000/health || exit 1" \
  --health-interval=10s \
  --health-timeout=5s \
  --health-retries=3 \
  myapp:latest

Docker Compose альтернатива

Для сложных конфигураций лучше использовать docker-compose:

version: '3.8'
services:
  app:
    image: myapp:latest
    container_name: myapp
    ports:
      - "8000:8000"
    environment:
      - DEBUG=false
      - DB_HOST=db
    env_file:
      - .env
    volumes:
      - ./src:/app/src
      - logs:/app/logs
    networks:
      - myapp_network
    depends_on:
      - db
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '1'
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 10s
      timeout: 5s
      retries: 3

  db:
    image: postgres:14
    networks:
      - myapp_network

networks:
  myapp_network:

volumes:
  logs:

Команды для управления запущенными контейнерами

# Просмотр логов
docker logs myapp
docker logs -f myapp  # Follow (live)

# Выполнить команду в контейнере
docker exec -it myapp bash
docker exec myapp python script.py

# Просмотр процессов
docker ps
docker ps -a  # Все контейнеры

# Остановка и удаление
docker stop myapp
docker rm myapp

Резюме основных параметров

ПараметрОписаниеПример
-dФоновый режим-d
-itИнтерактивный-it
-pПорты-p 8080:80
-vТомы-v /host:/container
-eПеременные-e KEY=value
-mПамять-m 512m
--cpusCPU--cpus 2
--nameИмя--name app
--networkСеть--network mynet
--restartПерезагрузка--restart always

В своей работе я часто использую docker-compose для локальной разработки и docker run для быстрого тестирования отдельных контейнеров.