Я пытаюсь запустить контейнер Docker в качестве маршрутизатора между частной ( --internal
) сетью Docker и предопределенной host
сетью. Это означает, что контейнер должен иметь два сетевых интерфейса: один «внешний» интерфейс, который может получить доступ ко всем IP-адресам хоста, и один «внутренний» интерфейс, который действует как шлюз для контейнеров во внутренней сети Docker.
Контейнер маршрутизатора сам затем будет передавать сетевой трафик NAT из / в контейнеры.
Я не нашел способ настроить Docker для запуска контейнера с этими двумя интерфейсами. Самое близкое, что я мог получить, - это назначить два bridge
интерфейса, что не совсем то, что мне нужно.
Попытка подключения вручную приводит к ошибке:
# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network
Кто-нибудь может показать мне, как этого добиться, желательно даже с помощью Docker Compose?
источник
Ответы:
Согласно этому Q & A на github :
источник
network_mode
Не работает , если вам нужно что - то связанное с внутренней сетью и принимающей сети. Кажется безумным, что мы не можем найти хорошее и ясное решение этой проблемы.Docker не позволяет подключать контейнер к сети хоста и любой другой сети моста Docker одновременно. Я постараюсь проиллюстрировать причину на примере:
С вышеупомянутой настройкой я предполагаю, что сеть хоста видна из C2, и я полагаю, что это причина, по которой Docker автоматически предотвращает непреднамеренную передачу сети хоста контейнерам, не указанным хостом.
При этом, если у нас есть набор контейнеров, и мы хотим, чтобы все они были связаны между собой, и только один контейнер имел доступ к сети хоста, мой подход был бы следующим:
РЕДАКТИРОВАТЬ: Нам все равно придется адаптировать политики iptables таким образом, чтобы можно было получить доступ к C1 из остальных контейнеров (см. Https://docs.docker.com/network/iptables/ ).
источник