ปัญหาหนึ่งที่ได้มักเจอเมื่อใช้งาน Docker compose คือ
ลำดับการ start ของ service ต่าง ๆ นั่นเอง
แน่นอนว่าใน docker compose ก็จะมี depends_on ให้ใช้งาน
แต่ปัญหาก็ยังมีอยู่คือ Service ต่าง ๆ ก็ start ตามลำดับ
แต่ว่ามีบาง service ที่ start แล้วแต่ยังไม่พร้อมใช้งาน
ซึ่งอาจจะทำให้เกิดปัญหากับ service อื่น ๆ ที่ต้องใช้งานตอน start เช่นกัน
ยกตัวอย่างเช่น
Service A เป็น database
Service B ทำหน้าที่สร้าง table และ สร้างข้อมูล
แน่นอนว่า ถ้าใช้ depends_on ก็ได้แค่ลำดับ คือ
ให้สร้าง service A ก่อน B
แต่ B จะทำงานผิด ถ้า A ยังไม่ start เสร็จสมบูรณ์
"คำถาม แก้ไขปัญหานี้อย่างไรดี ?"
คำตอบ
เอกสารของ Docker ก็เตรียมไว้ให้แล้วคือ
Control startup and shutdown order in Compose
แน่นอนว่ามีคนทำไว้ให้แล้วทั้ง
หรือเขียน shell script เองก็ได้
โดยนำคำสั่งเหล่านี้ไปใส่ที่ command ของแต่ละ service
ในไฟล์ docker compose ได้เลย
แต่อย่าลืมตรวจสอบด้วยว่า
Docker image ที่ใช้งานมีคำสั่งต่าง ๆ ที่ใช้ใน script ด้วยหรือไม่
มิฉะนั้นก็อาจจะพังได้
ตัวอย่างเขียน shell script เอง
ทำการตรวจสอบว่า mysql ทำการ start เสร็จแล้วหรือยัง
ถ้ายัง start ไม่เสร็จจะวนถามไปเรื่อย ๆ ทุก ๆ 1 วินาที
หรืออาจจะทำการเขียน code เองเลยก็ได้
ยกตัวอย่างเช่น
เพียงเท่านี้ก็สามารถจัดลำดับการทำงานของ service ได้ถูกต้องตามที่ต้องการแล้ว
Code ตัวอย่างอยู่ที่ GitHub::Up1