ปัญหา
ทำการพัฒนาระบบงานด้วย NodeJS
ทำงานร่วมกับ MySQL ผ่าน ORM library ชื่อว่า Sequelize
ในการ build และ run สำหรับการพัฒนา จะใช้งาน Docker compose
แต่ตอน run เจอปัญหา การเชื่อมต่อไปยัง MySQL ดังนี้
เพิ่มเติมเกี่ยวกับ config การเชื่อมต่อไปยัง MySQL จาก NodeJS ดังนี้
[gist id="c46ad8902e80c47ed2d9d88cdd45b83a" file="config.json"]ส่วน Docker compose file เป็นดังนี้
[gist id="c46ad8902e80c47ed2d9d88cdd45b83a" file="docker-compose.yml"]Environment ที่ใช้งาน ประกอบไปด้วย
- Mac OS
- Docker Desktop 3.3.1
วิธีการแก้ไขเบื้องต้น
เป็นปัญหาที่แปลกดี เพราะว่า
การใช้ docker compose นั้น ทุก ๆ service นั้น
จะใช้งาน network เดียวกันอยู่แล้ว
น่าจะติดต่อสื่อสารกันได้สิ
เพราะว่าใน configuration file ก็อ้างถึงชื่อ service เลย
แต่จาก error message แล้ว แสดงว่า
ตัว sequlize พยายาม resolve IP ไปยัง 127.0.0.1 เสมอ
หรือว่าเป็นเพราะตัว sequlize เอง !!
ส่วนการแก้ไขปัญหาเฉพาะหน้าหรือง่าย ๆ คือ
การเพิ่ม network_mode ใน Docker compose file ไปเลย
ซึ่งทำการ config ได้หลายรูปแบบ ดังนี้
- container:<container id>
- service:<service name>
- bridge/host/none
ส่วนที่เลือกใช้คือ service ไปเลย ดังนี้
[gist id="c46ad8902e80c47ed2d9d88cdd45b83a" file="docker-compose1.yml"]ทำให้สามารถทำงานต่อไปได้แล้ว