มีหลายๆ กรณีที่เราทดลองเล่น 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 ของเราแล้ว
หรือถ้ายังไม่ได้อีกให้ลองสั่ง docker inspect <container ID>
แล้วหาคำว่า “Gateway” ที่อยู่ใน “Networks” ดูครับ ตรงนั้นจะบอก IP ของ Gateway มา ให้เอา IP นั้นไปใช้แทน
Ref: Networking features in Docker Desktop for Mac | Docker Documentation