Гид по технологиям

Статические IP в Docker — настройка и Docker Compose

4 min read DevOps Обновлено 03 Dec 2025
Статические IP в Docker — настройка и Compose
Статические IP в Docker — настройка и Compose

Диаграмма: пользовательские сети Docker и статические IP

Быстрые ссылки

  • Зачем использовать статический IP?
  • Настройка статических IP
  • Использование Docker Compose

Почему использовать статический IP

Существуют два сценария “статического IP”:

  • Приватный IP — для внутренней сети хоста или пользовательских сетей Docker. Используется, когда один контейнер должен надёжно обращаться к другому по фиксированному адресу.
  • Публичный IP — адрес за пределами хоста (интернет). Для внешнего доступа чаще применяют проброс портов (port binding), а не назначение публичного IP контейнеру.

Важно: если вы хотите, чтобы служба была доступна извне, проще и безопаснее публиковать порты хоста и использовать обратный прокси, например NGINX или Traefik.

Пример проброса порта 80 хоста на порт 8080 контейнера:

docker run --publish=80:8080 nginx

Если задача — обеспечить устойчивую связь между контейнерами внутри сети, то Docker предоставляет alias-имена сервисов, которые автоматически резолвятся в IP контейнера. Например, один контейнер может подключаться к MongoDB через строку подключения вида mongodb://mongohost:27017 если вы подключили контейнер с алиасом mongohost.

docker network create example
docker run --net example --name nginx -d nginx
docker network connect example --alias mongohost mongodb

Настройка статических IP

Если вы всё же хотите назначить приватный статический IP, выполните следующие шаги:

  1. Создайте пользовательскую сеть с указанной подсетью. Подсеть фиксирует диапазон IP, из которого вы будете выдавать адреса.
docker network create --subnet=172.20.0.0/16 customnetwork
  1. Запустите контейнер, указав сеть и желаемый IP:
docker run --net customnetwork --ip 172.20.0.10 -d --name my-container my-image
  1. Проверьте адрес контейнера командой inspect или зайдя внутрь контейнера:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container
docker exec -it my-container /bin/bash

Важно: вручную назначайте IP внутри диапазона подсети и следите, чтобы не было конфликтов с другими контейнерами или хостами.

Использование Docker Compose

Docker Compose упрощает запуск множества контейнеров и позволяет задать статические IP через блок networks + ipv4_address. Ниже — корректный пример docker-compose.yml в синтаксисе версии 2:

version: '2'

services:
  webserver:
    image: nginx
    container_name: web-server
    networks:
      customnetwork:
        ipv4_address: 172.20.0.10

networks:
  customnetwork:
    ipam:
      config:
        - subnet: 172.20.0.0/16

После запуска с помощью docker-compose up -d контейнер web-server получит IP 172.20.0.10 в сети customnetwork.

Альтернативные подходы

  • DNS-алиасы в пользовательской сети: вместо статического IP используйте алиасы контейнеров и встроенный DNS Docker. Это уменьшает риск конфликтов IP и упрощает миграцию.
  • Reverse proxy / транспорт уровня 7: если нужно гарантировать доступ извне, публикуйте порты и направляйте трафик через обратный прокси. Это удобнее для SSL и маршрутизации по имени хоста.
  • Macvlan сети: если требуется, чтобы контейнеры выглядели в сети как полноценные хосты с собственными MAC/IP, используйте драйвер macvlan (сложнее и требует сетевых прав).

Когда фиксированный IP не подходит

  • Динамическая оркестрация (Kubernetes, Docker Swarm): в таких системах адреса могут меняться; лучше использовать сервисы, DNS или load balancer.
  • Многообразие хостов: если контейнеры распределены по разным физических хостам, локальный статический IP внутри одного Docker-host мало помогает.

Чек-лист по ролям

Разработчик:

  • Убедиться, что код использует DNS-имена сервиса, а не жёстко зашитые IP.
  • Проверить конфигурацию окружений (dev/staging/prod).

DevOps / Системный администратор:

  • Создать пользовательскую сеть с определённой подсетью.
  • Назначить IP и проверить отсутствие конфликтов.
  • Настроить мониторинг и резервирование адресов.

Системный архитектор:

  • Оценить, нужен ли статический IP или лучше DNS/Load Balancer.
  • Выбрать подходящий сетевой драйвер (bridge, macvlan).

Методология быстрого развертывания

  1. Спланируйте подсеть и диапазон адресов.
  2. Создайте сеть с ipam и subnet.
  3. Запустите контейнеры с –ip или через docker-compose с ipv4_address.
  4. Прогоните тесты доступности и проверку конфликтов.
  5. Документируйте сопоставление услуг ↔ IP.

Отладка и распространённые ошибки

  • Ошибка: “IP already in use” — значит адрес занят. Проверьте другие контейнеры и освободите IP.
  • Ошибка: контейнер не доступен с хоста — проверьте правила firewall, и что сеть действительно относится к текущему демону Docker.
  • Неправильный формат команды — используйте –ip (две дефисные) и проверяйте синтаксис docker run.

Критерии приёмки

  • Контейнер получает ожидаемый IPv4-адрес из заданной подсети.
  • Связь между контейнерами по IP и по алиасам работает корректно.
  • При перезапуске контейнера заданный IP сохраняется.

Глоссарий

  • Подсеть — диапазон IP-адресов в сети, задаётся маской, например /16.
  • IPAM — механизм управления адресами в Docker (IP Address Management).
  • ipv4_address — параметр в docker-compose, который фиксирует IPv4-адрес.

Короткое резюме

Статические приватные IP в Docker полезны для прямого доступа между контейнерами и с хоста, но чаще стоит предпочесть DNS-алиасы и проброс портов для внешнего доступа. Для назначения статического IP создайте пользовательскую сеть с подсетью и выдавайте адреса через –ip или через docker-compose с ipv4_address. Всегда документируйте и проверяйте конфликты адресов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как запретить пересылку писем в Outlook
Безопасность почты

Как запретить пересылку писем в Outlook

Как включить и настроить тёмную тему в Windows
Windows

Как включить и настроить тёмную тему в Windows

Будильник, таймер и секундомер на Android
Android.

Будильник, таймер и секундомер на Android

Как удалить аккаунт X (Twitter) — руководство
Социальные сети

Как удалить аккаунт X (Twitter) — руководство

Автосубтитры в Zoom: как включить и улучшить точность
Доступность

Автосубтитры в Zoom: как включить и улучшить точность

Поиск эмодзи на iPhone и iPad
Руководство

Поиск эмодзи на iPhone и iPad