ถ้าเราอยากเชื่อมต่อ Service อย่างเช่น Database ที่รันบนเครื่อง Host จาก Docker Container ต้องเซต DNS เป็นอะไร?

มีหลายๆ กรณีที่เราทดลองเล่น Service ต่างๆ บนเครื่องของเราเอง (เครื่อง Host) แล้วก็ใช้ Docker ด้วย ทีนี้ถ้าเราอยากจะเชื่อมต่อ Service อย่างเช่น Database ที่รันอยู่บนเครื่อง Host เนี่ย เราจะไม่สามารถใช้ DNS เป็น localhost ได้ล่ะ จากตัว Docker Container

เพราะว่าเนื่องจากเราอยู่ใน Container แล้วเราใช้คำว่า localhost มันจะไม่ได้มองออกมาที่เครื่อง Host ของเรา ทำให้หา Service ที่เราต้องการจะเชื่อมต่อไม่เจอ

Solution

ให้เราเซต DNS เป็น host.docker.internal หรือ gateway.docker.internal แทนครับ เท่านี้ Docker Container ของเรามันก็จะมองออกมาเห็น Service ที่รันอยู่ที่เครื่อง Host ของเราแล้ว :grinning_face_with_smiling_eyes:

หรือถ้ายังไม่ได้อีกให้ลองสั่ง docker inspect <container ID> แล้วหาคำว่า “Gateway” ที่อยู่ใน “Networks” ดูครับ ตรงนั้นจะบอก IP ของ Gateway มา ให้เอา IP นั้นไปใช้แทน

Ref: Networking features in Docker Desktop for Mac | Docker Documentation

2 Likes