Как определить, в какой сети находится Docker-контейнер?

«Как определить, в какой сети находится Docker-контейнер?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Чтобы узнать, к каким Docker-сетям подключен контейнер, используется команда docker inspect с фильтрацией. Это важно для диагностики проблем с сетевым взаимодействием между сервисами.

1. Основной способ — получить список имен сетей:

docker inspect <container_name_or_id> --format='{{range $net, $conf := .NetworkSettings.Networks}}{{$net}} {{end}}'
# Пример вывода: bridge custom_overlay_net

2. Детальная информация по каждой сети (IP, Gateway, MAC):

docker inspect <container_name_or_id> --format='{{json .NetworkSettings.Networks}}' | jq .

Если jq не установлен, можно использовать grep:

docker inspect <container_name_or_id> | grep -A 15 "Networks"

3. Контекст и практика: По умолчанию контейнер подключается к сети bridge. В продакшене я использую пользовательские сети (особенно overlay для Swarm/Kubernetes) для изоляции трафика. Чтобы увидеть все доступные сети:

docker network ls

Пример из реального кейса: При проблеме, когда контейнер приложения не мог достучаться до БД, я проверил их сети:

docker inspect my_app --format='{{.NetworkSettings.Networks}}'
docker inspect postgres_db --format='{{.NetworkSettings.Networks}}'

Оказалось, БД была в сети db_network, а приложение — только в bridge. Решением стало подключение приложения к нужной сети: docker network connect db_network my_app.