Lucrez la un proiect în care rulez un container Nginx (un echilibrator de încărcare) cu porturile 80 și 443 publicate pe gazdă și alte câteva containere Nginx de aplicații cu porturi nepublicate. Toate trei fac parte dintr-o rețea de punte personalizată în Docker și pot comunica între ele folosind numele containerelor lor.
Cred că acest lucru se întâmplă datorită DNS-ului intern al Docker care rulează pe 127.0.0.11. Un lucru pe care l-am observat, totuși, este că orice am pus FQDN-ul meu în /etc/hosts al sistemului gazdă și îl rezolv la 127.0.0.1 (sau 127.0.1.1), de asemenea, determină containerele să rezolve acest FQDN la adresa IP locală. .
Este în regulă pentru echilibrator de încărcare - va ajunge singur. De asemenea, este bine pentru sistemul gazdă, deoarece porturile echilibratorului de încărcare sunt publicate în sistemul gazdă. Dar se sparge pe containerele de aplicații, care nu mai pot ajunge la echilibratorul de încărcare prin FQDN, deoarece se rezolvă singuri.
Iată eșantionul meu docker-compose.yaml:
versiunea: "3.9"
Servicii:
livre:
imagine: "bitnami/nginx:latest"
aplicația 1:
imagine: "bitnami/nginx:latest"
aplicația 2:
imagine: "bitnami/nginx:latest"
/etc/hosts al gazdei mele:
127.0.0.1 testing.org
Apoi, într-unul dintre containerele aplicației:
# cat /etc/resolv.conf
serverul de nume 127.0.0.11
Fișierul găzduiește containerul:
# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.23.0.2 67d3aaa71abb
Si rezolutia:
# dig testing.org
;; SECȚIUNEA RĂSPUNSURI:
testing.org. 0 ÎN A 127.0.0.1
;; SERVER: 127.0.0.11#53(127.0.0.11)
Bănuiesc că acesta este în mare parte un comportament destinat, dar nu am putut găsi prea multe opțiuni pentru a controla acest lucru.
Aș putea elimina intrarea din fișierul /etc/hosts al gazdei, caz în care va rămâne la latitudinea serverelor DNS reale să rezolve FQDN-ul din interiorul containerelor, dar și gazda. În plus, nu eu am fost cel care l-a pus acolo în primul rând, a fost făcut de furnizorul meu de cloud prin cloud-init, cred că nu sunt sigur din ce motive.
Aș putea adăuga intrări explicite ale gazdelor la fiecare container cu FQDN, care să indice către un IP public sau poate IP-ul intern al echilibratorului de încărcare sau IP-ul intern al gazdei. Sună ca un coșmar de întreținut.
De asemenea, nu aș putea folosi serviciul DNS al Docker, caz în care voi pierde capacitatea de a face referire la containere legate după numele lor în interiorul containerelor, ceea ce este o caracteristică foarte bună pe care nu vreau să o pierd.
Există alte opțiuni? Am pierdut ceva? Docker versiunea 20.10.9, compuse versiunea 1.29.2. Gazdă Ubuntu 20.04.
P.S. Nu, testing.org nu se rezolvă de fapt la 127.0.0.1, o încercare bună totuși.
Mulțumiri.