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

Jak získat IP adresu kontejneru Docker od hostitele

Kontejnery Docker nejsou jen o izolaci – často se používají ke správě procesů, které spolu stále potřebují přímo komunikovat. Ke komunikaci však často potřebujete znát IP adresu každého kontejneru, kterou můžete zjistit pomocí několika příkazů.

Zvažte použití mostu definovaného uživatelem

Docker networking je trochu komplikovaný. Kontejnery spuštěné ve výchozím nastavení budou umístěny ve výchozí „přemosťovací síti“ a mohou přímo komunikovat s jinými kontejnery za předpokladu, že máte jejich soukromou IP adresu. Toto lze vypnout pro skutečnou izolaci, ale není to ve výchozím nastavení.

Tuto adresu můžete také použít ke komunikaci s hostitelským OS, pokud nechcete vázat port. Toto je primární případ použití přístupu ke kontejneru přímo přes jeho IP adresu, ale pravděpodobně byste měli stále pouze svázat port (můžete jej nechat uzavřený před internetem ve vašem firewallu).

IP adresy jsou však pomíjivé a při zastavení a spuštění kontejnerů se mohou snadno zlomit. Pro komunikaci mezi kontejnery poskytuje Docker řešení prostřednictvím uživatelsky definovaných přemosťovacích sítí, které byste pravděpodobně měli používat, pokud mezi sebou komunikuje více kontejnerů.

Kontejnery přidané do jiných než výchozích sítí budou moci vzájemně přistupovat prostřednictvím svého aliasu, který se automaticky převede na privátní IP. Můžete vytvářet nové sítě, spouštět kontejnery v těchto sítích a připojit existující kontejnery k síti. Poté můžete přistupovat k ostatním kontejnerům pomocí aliasu jako názvu hostitele; například kontejner NGINX zde může přistupovat k instanci MongoDB pomocí připojovacího řetězce mongodb://mongohost:27017 .

docker network create example
docker run --net example --name nginx -d nginx
docker network connect example --alias mongohost mongodb

Používání mostů má mnoho výhod a doporučuje se před starším --link možnost, která funguje ve výchozí síti. Primárním problémem je, že kontejnery v uživatelsky definovaných sítích budou vystaveny vzájemným portům, bez ohledu na to, zda jsou publikovány, ale můžete nastavit více sítí, takže to obvykle není problém.

Další nevýhodou je, že protože uživatelsky definované sítě poskytují lepší izolaci, také vám neumožňují přístup ke kontejnerům napříč sítěmi s jejich privátní IP adresou. Všechny kontejnery ve výchozí síti spolu mohou mluvit, ale jakmile je odstraníte a umístíte do sítě definované uživatelem, tato možnost je deaktivována. Kontejner však můžete také spustit ve výchozí i uživatelem definované síti, takže není problém, pokud se rozhodnete kontejner zviditelnit pro ostatní.

Získání IP adresy z Dockeru

Pokud však chcete pouze IP adresu, je velmi snadné ji získat z hostitelského operačního systému. Nejprve budete muset najít ID nebo název kontejneru, pro který chcete získat informace, což můžete provést pomocí:

docker ps

Poté spusťte docker inspect , který vrátí obrovský soubor JSON se všemi informacemi o kontejneru. Nás však zajímá pouze IP adresa, takže jí můžete předat možnost formátování pomocí -f zúžit ji pouze na adresu.

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_or_id

Tento příkaz funguje dobře, ale také vrací informace pouze pro jeden kontejner, jehož ID budete potřebovat. Pokud chcete konkrétnější řešení, můžete použít docker network inspect který vytiskne informace o všech kontejnerech v dané síti, volitelně ve formátu jako vyhledávací tabulka JSON:

docker network inspect bridge -f '{{json .Containers}}'

Získání konfigurace sítě z kontejneru

Kontejnery Docker jsou ve skutečnosti pouze izolačním mechanismem a nic vám nebrání v tom, abyste do kontejneru pouze vstoupili a spustili běžné příkazy Linuxu, jako je ifconfig a získání IP adresy tímto způsobem.

Chcete-li to provést, budete muset získat název nebo ID kontejneru pomocí docker ps a poté spusťte exec -it , v tomto případě vytištění všech informací IP:

docker exec -it b94ef3169cd4 ip a


Docker
  1. Jak se odpojit od dockerového kontejneru bez zastavení

  2. Jak sdílet data mezi kontejnery Docker

  3. Jak získat informace o kontejneru v Dockeru

  1. Jak vypsat Docker kontejnery

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

  3. Jak získám svou IP adresu z příkazového řádku?

  1. Jak spravovat kontejnery Docker? Osvědčené postupy

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

  3. Jak mohu získat informace o kontejneru Docker Linux ze samotného kontejneru?