ปัญหาที่พบเจอ
เมื่อนำ Docker มาใช้งานร่วมกับระบบ Continuous Integration (CI) คือ
ในแต่ละ container จะต้อง start service ต่าง ๆ ขึ้นมา
ซึ่งพบว่าแต่ละ service ก็มีความช้าและเร็วในการ start service
ดังนั้นถ้าต้องการทดสอบระบบที่ต้องใช้ service เหล่านี้
จะไม่สามารถทดสอบได้
หรือการทดสอบพังแน่นอน
เนื่องจาก service ยัง start ไม่เสร็จนั่นเอง
วิธีการแก้ไขปัญหา
สร้าง shell script สำหรับตรวจสอบ service ว่า start สำเร็จหรือไม่
ซึ่งจะทำการวน loop ตรวจสอบไปเรื่อย ๆ
ดังนี้
[gist id="8105f3c0c99b070382beca2b78eebe27" file="waiting.sh"]
ถ้าใช้ผ่าน docker compose ก็ใช้ไม่ยาก
สามารถเขียนได้แบบนี้
[gist id="8105f3c0c99b070382beca2b78eebe27" file="compose"]
เพียงเท่านี้ก็สามารถแก้ไขปัญหาที่พบเจอได้เรียบร้อย
Reference Websites
https://8thlight.com/blog/dariusz-pasciak/2016/10/17/docker-compose-wait-for-dependencies.html
https://github.com/dadarek/docker-wait-for-dependencies