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