Accesarea adresei gazdei din interiorul unui container

  • 1 minute de citit
  • 1 exemplu de cod
  • 1 imagine

Disponibil și în English

Pe această pagină

miniatură blog

Salut tuturor! 👋

Acest articol este despre cum accesezi URL-ul gazdei din interiorul unui container Podman (sau Docker) și cum să eviți o greșeală pe care am făcut-o când am configurat containerele.

Dacă ai un serviciu care rulează într-un container și vrei să accesezi URL-ul gazdei, va trebui să folosești o adresă specială numită adresa host-gateway. Alte opțiuni includ scrierea fixă a adresei IP a gazdei.

Poți folosi oricare dintre următoarele URL-uri când vrei să accesezi gazda din interiorul unui container:

  • host.containers.internal
  • host.docker.internal

Sursă:

The host-gateway address is also used by Podman to automatically add the host.containers.internal and host.docker.internal hostnames to /etc/hosts. 

Ce să nu faci

Când configuram Forgejo Runner pentru NucuLabs Forge am adăugat host.containers.internal în fișierul /etc/hosts de pe sistemul meu.

Motivul pentru care am făcut asta este că Forgejo se afla în spatele Anubis, un proxy care îl protejează de scrapere și de LLM-uri.

Primul meu gând a fost că, dacă Forgejo este în spatele proxy-ului, atunci Runner-ul nu îl poate accesa.

Deoarece joburile Runner-ului rulează în containere Docker, iar Runner-ul rulează direct pe gazdă, aveam nevoie de o adresă pe care să le-o dau ambelor servicii, ca amândouă să se poată conecta la Forgejo. Așa că le-am dat host.containers.internal și am încercat să fiu deștept adăugând o linie în /etc/hosts care face ca host.containers.internal să indice spre 127.0.0.1.

Asta a funcționat bine, până când am repornit sistemul.

Când Podman a pornit, a citit și fișierul /etc/hosts, iar setările din acesta au avut prioritate față de ce avea inițial (IP-ul mașinii gazdă). Deoarece am folosit host.containers.internal și în alte containere, toate au început să indice spre 127.0.0.1, ceea ce a făcut ca alte servicii să devină indisponibile.

Mi-a luat ceva timp să depanez și să găsesc cauza reală. Acest hack funcționa perfect înainte de repornirea sistemului.

Soluția a fost simplă: am eliminat intrarea din /etc/hosts și am folosit https://forge.nuculabs.dev/ ca URL pentru Forgejo Runner. Chiar dacă Anubis este în fața lui, Runner-ul poate accesa instanța Forgejo.

Dacă nu aș fi încercat să fiu deștept, aș fi putut încerca asta chiar de la început și aș fi evitat soluțiile ocolitoare. Mulțumesc pentru lectură!

Voi scrie curând un articol despre cum să pui Anubis în fața serviciilor tale, așa că rămâi pe fază abonându-te la newsletter sau la feed-ul RSS!