Jak je uvedeno v jednom z komentářů, funguje to pro Mac (pravděpodobně i pro Windows/Linux):
CHCI SE PŘIPOJIT Z KONTEJNERU K SLUŽBĚ U HOSTITELE
Hostitel má měnící se IP adresu (nebo žádnou, pokud nemáte přístup k síti). Doporučujeme, abyste se připojili ke speciálnímu názvu DNS
host.docker.internal
který se překládá na interní IP adresu používanou hostitelem. Toto je pro účely vývoje a nebude fungovat v produkčním prostředí mimo Docker Desktop for Mac.K bráně se také dostanete pomocí
gateway.docker.internal
.
Citováno z https://docs.docker.com/docker-for-mac/networking/
To mi fungovalo bez použití --net=host
.
Jednoduchým, ale relativně nejistým způsobem by bylo použití --net=host
možnost docker run
.
Tato možnost umožňuje, aby kontejner používal síťový zásobník hostitele. Poté se můžete připojit ke službám běžícím na hostiteli jednoduše pomocí "localhost" jako hostitelského názvu.
To se snadněji konfiguruje, protože nebudete muset konfigurovat službu tak, aby přijímala připojení z IP adresy vašeho kontejneru dockeru, a nebudete muset kontejneru dockeru sdělovat konkrétní IP adresu nebo název hostitele, ke kterému se má připojit. port.
Můžete to například vyzkoušet spuštěním následujícího příkazu, který předpokládá, že se váš obrázek jmenuje my_image
, váš obrázek obsahuje telnet
a služba, ke které se chcete připojit, je na portu 25:
docker run --rm -i -t --net=host my_image telnet localhost 25
Pokud uvažujete, že to uděláte tímto způsobem, přečtěte si prosím upozornění o zabezpečení na této stránce:
https://docs.docker.com/articles/networking/
Říká:
--net=host -- Řekne Dockeru, aby vynechal umístění kontejneru do samostatného síťového zásobníku. V podstatě tato volba říká Dockeru, aby nekontejneroval síť kontejneru! Zatímco kontejnerové procesy budou stále omezeny na svůj vlastní souborový systém a seznam procesů a limity zdrojů, rychlý příkaz ip addr vám ukáže, že z hlediska sítě žijí „venku“ v hlavním hostiteli Dockeru a mají plný přístup k jeho síťovým rozhraním. . Všimněte si, že to kontejneru nedovolí překonfigurovat zásobník hostitelské sítě – to by vyžadovalo --privileged=true – ale umožní to kontejnerovým procesům otevřít porty s nízkým číslem jako jakýkoli jiný kořenový proces. Umožňuje také kontejneru přistupovat ke službám místní sítě, jako je D-bus. To může vést k tomu, že procesy v kontejneru budou moci provádět neočekávané věci, jako je restartování počítače. Tuto možnost byste měli používat opatrně.
Váš hostitel dockeru zpřístupní adaptér všem kontejnerům. Za předpokladu, že používáte nejnovější ubuntu, můžete spustit
ip addr
Tím získáte seznam síťových adaptérů, z nichž jeden bude vypadat nějak takto
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
valid_lft forever preferred_lft forever
Budete muset králikovi/mongo říct, aby se navázal na tuto IP (172.17.42.1). Poté byste měli být schopni otevřít připojení k 172.17.42.1 z vašich kontejnerů.