ฉันกำลังทำงานในโครงการเว็บที่ประกอบด้วยหลายบริการ ทุกบริการมีไฟล์ docker-compose.yml ของตัวเองที่ประกาศว่าเป็น "แอป" และอาจขึ้นต่อกันได้ (ฐานข้อมูล ฯลฯ) เพื่อให้พวกเขาทั้งหมดเล่นด้วยกันอย่างสวยงาม ฉันได้สร้าง local dev env ที่เชื่อมโยงพวกเขาเข้าด้วยกันด้วยพร็อกซี nginx ที่มีบล็อกเซิร์ฟเวอร์ที่มีชื่อเซิร์ฟเวอร์ที่เหมาะสม จากนั้นจึงส่งคำขอไปยังคอนเทนเนอร์จริงโดยใช้ proxy_pass'es โดยใช้เครือข่ายของ Docker
ฉันได้เพิ่ม dnsmasq ในคอนเทนเนอร์ด้วยเพื่อช่วยเหลือ DNS เพื่อใช้ชื่อโดเมนในเครื่องแทน localhost:port combo's (โดยเพิ่มตัวแก้ไขสำหรับการทดสอบ tld เป็น 127.0.0.1)
เขียนพร็อกซีนักเทียบท่า:
บริการ:
พร็อกซีท้องถิ่น:
สร้าง: ./nginx
พอร์ต:
- 80:80
- 443:443
local-proxy-dnsmasq:
สร้าง: ./dnsmasq # สร้างที่ด้านบนของ 4km3/dnsmasq
พอร์ต:
- "53:53/tcp"
- "53:53/udp"
cap_add:
- NET_ADMIN
เครือข่าย:
ค่าเริ่มต้น:
ภายนอก:
ชื่อ: โดเมนท้องถิ่น
dnsmasq.conf:
ฟังที่อยู่ = 0.0.0.0
อินเทอร์เฟซ = eth0
ผู้ใช้ = ราก
ที่อยู่=/.test/0.0.0.0
ตัวอย่างพร็อกซีเซิร์ฟเวอร์ nginx:
เซิร์ฟเวอร์ {
server_name login.domain.test;
ที่ตั้ง / {
#ส่วนหัว...
proxy_pass http://domain-login:8080;
}
}
ตัวอย่างนักเทียบท่าประกอบด้วยหนึ่งในบริการ:
บริการ:
โดเมนเข้าสู่ระบบ:
สร้าง: # ...
เครือข่าย:
- ค่าเริ่มต้น
- โดเมนท้องถิ่น
ทั้งหมดนี้ทำงานได้ดีในเบราว์เซอร์ ฉันสามารถไปที่ tenant.domain.test
, รับการเปลี่ยนเส้นทางไปที่ เข้าสู่ระบบ.domain.test
...
อย่างไรก็ตาม เมื่อคอนเทนเนอร์ที่รัน tenant.domain.test ต้องส่งคำขอ curl จากคอนเทนเนอร์ไปยังคอนเทนเนอร์อื่น (เช่น login.domain.test เพื่อดำเนินการโฟลว์ oauth ให้เสร็จสิ้น) คอนเทนเนอร์จะหยุดทำงานเนื่องจากกำลังพยายามแก้ไข เข้าสู่ระบบ.domain.test
โดยไปที่ตัวเอง:
root@6d25c2f5daf1:/var/www/app# nslookup login.domain.test
เซิร์ฟเวอร์: 127.0.0.11
ที่อยู่: 127.0.0.11#53
คำตอบที่ไม่ได้รับอนุญาต:
ชื่อ: login.domain.test
ที่อยู่: 0.0.0.0
;; หมดเวลาการเชื่อมต่อ; ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้
ถ้าฉันเปลี่ยน dnsmasq.conf จาก ที่อยู่=/.test/0.0.0.0
ถึง ที่อยู่ =/.test/10.0.1.102
(IP ที่กำหนดในปัจจุบันของคอมพิวเตอร์ของฉัน) ทุกอย่างทำงานได้ อย่างไรก็ตาม แน่นอนว่านี่ไม่ใช่วิธีแก้ปัญหาที่ได้ผลสำหรับเพื่อนร่วมงาน ทุกคนสามารถกำหนดให้ฉันอยู่บนเส้นทาง Google ที่ถูกต้องหรือมีวิธีแก้ไขได้ไหม