Ответ
Да, по умолчанию Docker Compose создает единую сеть типа bridge
для всех сервисов, определенных в файле docker-compose.yml
.
Это ключевая особенность, которая обеспечивает автоматическое обнаружение сервисов (service discovery).
- Имя сети: Генерируется автоматически по шаблону
<имя_директории>_default
. - Взаимодействие: Все контейнеры в этой сети могут обращаться друг к другу по имени сервиса, которое Docker Compose использует как DNS-имя (hostname).
Пример (docker-compose.yml
):
version: '3.8'
services:
api:
image: my-api-image
# API сможет подключиться к базе данных по адресу 'postgres-db:5432'
environment:
- DATABASE_URL=postgresql://user:password@postgres-db:5432/mydatabase
postgres-db:
image: postgres:13
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydatabase
В этом примере сервис api
найдет сервис postgres-db
по его имени postgres-db
без необходимости знать IP-адрес контейнера.