Lucrez la un proiect web care constă din mai multe servicii. Fiecare serviciu are propriul fișier docker-compose.yml care declară că este „aplicație” și posibilele dependențe (baze de date etc.). Pentru a le face pe toate să se joace frumos împreună, am construit un dev env local care le leagă împreună cu un proxy nginx care are blocuri de server cu nume de server adecvate și apoi proxy_passs solicitările către containerele reale folosind rețeaua Docker.
De asemenea, am adăugat dnsmasq într-un container, de asemenea, pentru a ajuta cu DNS, pentru a folosi numele de domenii local în loc de combo localhost:port (prin adăugarea unui resolver pentru testul tld la 127.0.0.1).
Proxy docker-compose:
Servicii:
local-proxy:
build: ./nginx
porturi:
- 80:80
- 443:443
local-proxy-dnsmasq:
build: ./dnsmasq # se construiește peste 4km3/dnsmasq
porturi:
- „53:53/tcp”
- „53:53/udp”
cap_add:
- NET_ADMIN
retele:
Mod implicit:
extern:
nume: domeniu-local
dnsmasq.conf:
adresa-ascultă=0.0.0.0
interfață=eth0
utilizator=rădăcină
adresa=/.test/0.0.0.0
exemplu de server proxy nginx:
Server {
nume_server login.domain.test;
Locație / {
# antete...
proxy_pass http://domain-login:8080;
}
}
exemplu docker-compose dintr-unul dintre servicii:
Servicii:
autentificare-domeniu:
construi: # ...
retele:
- Mod implicit
- domeniu-local
Toate acestea funcționează perfect în browser, pot merge la chiriaș.domeniu.test
, fiți redirecționat către login.domain.test
...
Cu toate acestea, atunci când containerul care rulează tenant.domain.test trebuie să facă o cerere de curl din containerul său către unul dintre celelalte (de exemplu, login.domain.test pentru a finaliza fluxul de oauth), se întrerupe deoarece încearcă să rezolve login.domain.test
mergând la sine:
root@6d25c2f5daf1:/var/www/app# nslookup login.domain.test
Server: 127.0.0.11
Adresa: 127.0.0.11#53
Răspuns neautorizat:
Nume: login.domain.test
Adresa: 0.0.0.0
;; conexiunea a expirat; niciun server nu a putut fi atins
Dacă schimb dnsmasq.conf din adresa=/.test/0.0.0.0
la adresa=/.test/10.0.1.102
(IP-ul atribuit în prezent computerului meu), totul funcționează. Cu toate acestea, desigur, aceasta nu este o soluție de lucru pentru colegi, de exemplu. Poate cineva să mă seteze pe calea Google corectă sau să aibă o soluție?