GNU/Linux >> Znalost Linux >  >> Linux

Předat hostitelský port do kontejneru dockeru

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ů.


Linux
  1. Jak opustit kontejner Docker

  2. Jak získat přístup k síťovému jmennému prostoru Docker Container z hostitele

  3. Spuštěný docker na Ubuntu:připojený svazek hostitele nelze zapisovat z kontejneru

  1. Spuštění shellu v kontejneru Docker Alpine

  2. Jaké je PID v hostiteli procesu běžícího uvnitř kontejneru Docker?

  3. Pochopení mapování portů dockeru

  1. Některé příkazy DOCKER

  2. Úvod do Dockeru

  3. Zviditelnění připojení NFS na hostiteli a čtení a zápis v kontejneru Docker