วิธีแก้ปัญหา Openresty ไม่สามารถ resolve service name ได้ใน Docker

ปกติแล้ว เวลาเราใช้งาน Docker แล้วต้องการให้ Container หรือ Service ตัวนึง ไปติดต่อกับ Container หรือ Service อีกตัวนึง เราจะอ้างอิงโดยใช้วิธีการใช้ชื่อ Service ในการอ้างอิงได้เลย แต่เมื่อต้องการใช้ Openresty จะต้องมีการ Set DNS ให้กับ Openresty ด้วย ไม่อย่างนั้นจะมีปัญหาเรื่อง resolve service name

ปัญหาต่อมาคือ แล้วจะ Set ให้ DNS เป็นอะไรหล่ะ?

เราจะใช้วิธีการแบบ Simple ที่สุด ก็คือ เข้าไปค้นการตั้งค่า Linux ใน Container โดยปกติแล้ว Linux จะเก็บการตั้งค่า DNS เอาไว้ที่ /etc/resolv.conf ครับ ขั้นตอนก็ไม่ยากครับ

  • เข้าไปใน Container โดยใช้คำสั่ง
docker exec -it (ชื่อของ Container) sh
  • เราจะเรียกดูภายในไฟล์ resolv.conf ด้วย cat
cat /etc/resolv.conf

จะได้ค่าประมาณนี้

nameserver 127.0.0.11
options ndots:0

ให้คัดลอกหมายเลข IP ในส่วนของ nameserver (ในที่นี่คือ 127.0.0.11) ไปใส่ใน nginx.conf ด้วยคำสั่ง

resolver 127.0.0.11;

แค่นี้ก็เรียบร้อยครับ