Linux

Как настроить сети Docker Compose: полное руководство

В этом руководстве вы научитесь создавать и настраивать сети Docker Compose, подключать контейнеры и диагностировать сетевые проблемы.

Обновлено 9 августа 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Docker 20.10+Docker Compose 2.0+Ubuntu 20.04+CentOS 8+

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

Сети в Docker Compose упрощают взаимодействие контейнеров друг с другом без публикации портов. Правильно настроенная сеть позволяет использовать имена хостов, изолирует трафик и ускоряет разработку и запуск приложений. После выполнения этого руководства у вас будет рабочая сеть для любого набора сервисов Docker Compose.

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

  • Docker Engine ≥ 20.10 и Docker Compose ≥ 2.0 (установлены и работают).
  • Права на выполнение команд docker (обычно требуется пользователь в группе docker).
  • Базовый проект Docker Compose (docker-compose.yml), который вы хотите расширить сетью.

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

Шаг 1: Установите Docker и Docker Compose

Установите необходимые пакеты.

# Ubuntu/Debian
sudo apt update && sudo apt install docker.io docker-compose
# CentOS/RHEL
sudo yum install docker docker-compose
# Либо через установщик Docker (https://docs.docker.com/engine/install/)

💡 Совет: После установки перезапустите службу Docker: sudo systemctl restart docker.

Шаг 2: Определите сеть в docker-compose.yml

Добавьте секцию networks: в корневой раздел файла docker-compose.yml. Пример для bridge-сети:

version: "3.9"

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example

networks:
  appnet:
    driver: bridge

Шаг 3: Подключите сервисы к сети

Для каждого сервиса, который должен быть в сети, укажите networks: со списком сетей. Если сервис использует только одну сеть, можете передать её как строку:

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    networks:
      - appnet
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    networks:
      - appnet

Шаг 4: Проверьте подключение

Запустите проект и проверьте сетевое взаимодействие:

docker compose up -d
# Проверьте пингом внутри контейнера web
docker exec <container_id_web> ping db
# Либо через curl, если сервис предоставляет HTTP
docker exec <container_id_web> curl -s http://db:5432

Если пинг успешен, сеть работает правильно.

Шаг 5: Диагностика типичных проблем

СимптомВозможная причинаРешение
Контейнеры не видят друг другаСеть не определена в корневом разделе networks:Убедитесь, что сети указаны в корне файла.
ping не успешенКонтейнер подключён к другой сети или отсутствует DNSПроверьте docker inspect <контейнер> на наличие сетевых алиасов; переопределите networks: в сервисе.
Контейнер не может разрешить DNS по имени хостаОтсутствует сетевой драйвер bridge или используется пользовательская сеть без DNSИспользуйте стандартный драйвер bridge или настройте сетевую подсеть вручную.

⚠️ Важно: Если вы используете пользовательскую сеть, убедитесь, что драйвер установлен (docker network create --driver <driver> <name>).

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

  • Каждый сервис должен иметь корректный IP-адрес в подсети сети (docker network inspect appnet).
  • docker compose ps показывает состояние сервисов как «up».
  • Внутри контейнера ping <имя-соседа> успешен, а curl http://<имя-сервиса> возвращает ответ.

Если всё вышеперечисленное работает, сеть настроена корректно и готова к использованию в производстве или разработке.

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

  • Разрешение DNS не работает: Убедитесь, что сетевые алиасы сервисов определены корректно (networks: - appnet или aliases: [...]).
  • Конфликт портов: Избегайте публикации одного и того же хост-порта несколькими сервисами; используйте уникальные порты или перенаправления внутри сети.
  • Утечка IP-адресов: После удаления сервисов удалите неиспользуемые сети: docker compose down --remove-orphans и docker network prune.

Следуя этим рекомендациям, вы сможете быстро настроить надёжные сети Docker Compose и избежать типичных ошибок.

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

Зачем в Docker Compose нужна отдельная сеть?
Можно ли подключить один сервис к нескольким сетям?
Как проверить, что контейнер подключён к сети?
Что делать, если контейнеры не видят друг друга после добавления в сеть?

Полезное

Установите Docker и Docker Compose
Определите сеть в docker-compose.yml
Подключите сервисы к сети
Проверьте подключение
Диагностика типичных проблем