GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak se připojit k Localhost v rámci kontejneru Docker

Při práci s Dockerem obvykle kontejnerizujete služby, které tvoří váš zásobník, a ke komunikaci mezi nimi používáte mezikontejnerovou síť. Někdy můžete potřebovat kontejner, abyste mohli komunikovat se službou na vašem hostiteli, která nebyla kontejnerizována. Zde je návod, jak získat přístup k localhost nebo 127.0.0.1 z kontejneru Docker.

Snadná možnost

Docker Desktop 18.03+ pro Windows a Mac podporuje host.docker.internal jako funkční alias pro localhost . Použijte tento řetězec uvnitř vašich kontejnerů pro přístup k vašemu hostitelskému počítači.

  • localhost a 127.0.0.1 – Tyto se přenesou do kontejneru .
  • host.docker.internal – Toto se přenese na externího hostitele.

Pokud na svém hostiteli provozujete server MySQL, kontejnery Docker k němu mohou přistupovat připojením k host.docker.internal:3306 . Toto je nejjednodušší technika, když pracujete na počítači se systémem Windows nebo Mac.

Uživatelé Docker Engine v systému Linux mohou povolit host.docker.internal také prostřednictvím --add-host příznak pro docker run . Spusťte kontejnery s tímto příznakem, abyste odhalili hostitelský řetězec:

docker run -d --add-host host.docker.internal:host-gateway my-container:latest

--add-host flag přidá záznam do kontejneru /etc/hosts soubor. Hodnota uvedená výše mapuje host.docker.internal k hostitelské bráně kontejneru, která odpovídá skutečnému localhost hodnota. Můžete nahradit host.docker.internal s vaším vlastním řetězcem, chcete-li.

Připojování k hostitelské síti

Docker poskytuje host síť, která umožňuje kontejnerům sdílet síťový zásobník vašeho hostitele. Tento přístup znamená localhost uvnitř kontejneru se překládá na fyzického hostitele, nikoli na samotný kontejner.

Kontejnery se spouštějí s hostitelskou sítí přidáním --network=host příznak:

docker run -d --network=host my-container:latest

Nyní může váš kontejner odkazovat na localhost nebo 127.0.0.1 přímo.

Pokud používáte Docker Compose, upravte definici služby kontejneru tak, aby zahrnovala network_mode pole:

services:
  my-service:
    network_mode: host

Tento přístup má několik výhrad. Před použitím je důležité zvážit všechny důsledky. Kontejnery obvykle získávají svou vlastní privátní síť, která je oddělená od zásobníku hostitele. Když zadáte --network=host , kontejner ve výchozím nastavení převezme nastavení sdílené sítě od vašeho hostitele.

Všechny porty vystavené kontejnerem budou vystaveny na hostiteli , i když nejsou explicitně deklarovány pomocí -p vlajka. Výchozí název hostitele kontejneru bude odpovídat názvu hostitele, i když to lze změnit pomocí --hostname vlajka.

Hostitelská síť může představovat bezpečnostní problém, který narušuje model izolace kontejnerů Docker. Stále to může být užitečné ve scénářích, kdy jste si jisti, že spuštěné kontejnery nebudou ve vzájemném konfliktu nebo nebudou způsobovat problémy ve vašem hostitelském prostředí. Režim hostitelské sítě je také rychlejší než výchozí režim mostu, protože neexistuje žádná virtualizační vrstva, kterou by provoz procházel.

Přístup k hostiteli pomocí výchozího režimu mostu

K vašemu hostiteli lze stále přistupovat z kontejnerů ve výchozím bridge síťový režim. Stačí na něj odkazovat pomocí jeho IP sítě Docker, namísto localhost nebo 127.0.0.1 .

Většina instalací Docker Engine bude představovat hostitele jako 172.17.0.1 na výchozím docker0 mostní síť. Svou vlastní IP můžete zkontrolovat spuštěním tohoto příkazu na vašem hostiteli:

ip addr show docker0

IP Docker vašeho hostitele se zobrazí na inet čára. Připojte se k této IP adrese ze svých kontejnerů, abyste získali úspěšný přístup ke službám běžícím na vašem hostiteli.

Jedním z úskalí tohoto přístupu je, že se možná nebudete moci připojit ke službám, které se vážou přímo k localhost . Musíte se ujistit, že vaše služby naslouchají připojení na vaší IP adrese Docker bridge a také na localhost a 127.0.0.1 . Jinak uvidíte connection refused nebo podobné chyby ve vašem kontejneru.

Přehled

Máte několik možností, když se potřebujete dostat mimo kontejner Docker na localhost vašeho počítače . Pokud používáte Windows nebo Mac, je nejlepší použít vestavěný host.docker.internal alias. Uživatelé Linuxu mohou nastavit něco podobného pomocí --add-host příznak při spouštění kontejneru.

Režim hostitelské sítě je univerzální alternativou, která umožňuje kontejnerům sdílet síťový zásobník vašeho hostitele. Můžete odkazovat na localhost přímo, ale je třeba si uvědomovat rizika a omezení. Není to vhodná volba, když je vyžadována silná síťová izolace.

Držet se režimu mostu může být nejlepší volbou pro pracovní zátěže, které jej podporují. Svažte služby svého hostitele s jeho IP adresou Dockeru a poté použijte tuto adresu k připojení z vašeho kontejneru. To vám umožní používat virtualizovanou síť Docker pro jednotlivé kontejnery a zároveň poskytovat směrování k vašemu hostiteli, když je to potřeba.


Docker
  1. Jak nainstalovat WordPress pomocí Docker

  2. Jak přiřadit statickou IP ke kontejneru Docker

  3. Jak vypsat Docker kontejnery

  1. Jak připojit kontejnery Docker

  2. Jak spustit MySQL v kontejneru Docker

  3. Jak opustit kontejner Docker

  1. Jak SSH do kontejneru Docker

  2. Jak připojit hostitelský adresář do kontejneru Docker

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