Próbuję uruchomić kontener Docker jako router między prywatną ( --internal
) siecią Docker a host
siecią predefiniowaną . Oznacza to, że kontener musi mieć dwa interfejsy sieciowe: jeden interfejs „zewnętrzny”, który może uzyskać dostęp do wszystkich adresów IP hosta, i jeden interfejs „wewnętrzny”, który działa jak brama dla kontenerów w wewnętrznej sieci Docker
Sam kontener routera będzie wtedy ruch sieciowy NAT z / do kontenerów.
Nie znalazłem sposobu na skonfigurowanie Dockera do uruchamiania kontenera z tymi dwoma interfejsami. Najbliższe, jakie mogłem uzyskać, to bridge
przypisanie dwóch interfejsów, co nie jest dokładnie tym, czego potrzebuję.
Próba ręcznego połączenia powoduje błąd:
# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network
Czy ktoś może mi pokazać, jak to osiągnąć, najlepiej nawet za pomocą Docker Compose?
źródło
Odpowiedzi:
Zgodnie z tymi pytaniami i odpowiedziami na github :
źródło
network_mode
Nie działa, jeśli trzeba coś połączony z siecią wewnętrzną a siecią gospodarza. Wydaje się szalone, że nie możemy znaleźć dobrego, jasnego rozwiązania tego problemu.Docker nie pozwala na podłączenie kontenera do sieci hosta i żadnej innej sieci mostu Docker w tym samym czasie. Spróbuję zilustrować przyczynę przykładem:
Przy powyższej konfiguracji domyślam się, że sieć hosta jest widoczna z C2, i przypuszczam, że to jest powód, dla którego Docker automatycznie uniemożliwia nam niezamierzone wystawienie sieci hosta na kontenery nieokreślone przez hosta.
Biorąc to pod uwagę, jeśli mamy zestaw kontenerów i chcemy, aby wszystkie były ze sobą połączone, a tylko jeden kontener ma dostęp do sieci hosta, moim podejściem byłoby:
EDYCJA: Musielibyśmy jeszcze dostosować zasady iptables w taki sposób, aby C1 był dostępny z pozostałych kontenerów (patrz https://docs.docker.com/network/iptables/ )
źródło