ก่อนมีปัญหาในของคุณDockerfile
:
RUN service mysql restart && /tmp/setup.sh
อิมเมจของ Docker จะไม่บันทึกกระบวนการที่กำลังทำงานอยู่ ดังนั้นRUN
คำสั่งของคุณจะดำเนินการเฉพาะในช่วงdocker build
เฟสและหยุดหลังจากการสร้างเสร็จสมบูรณ์ คุณต้องระบุคำสั่งแทนเมื่อคอนเทนเนอร์เริ่มต้นโดยใช้คำสั่งCMD
หรือENTRYPOINT
คำสั่งด้านล่าง:
CMD mysql start
ประการที่สองคอนเทนเนอร์นักเทียบท่าต้องการกระบวนการ (คำสั่งสุดท้าย) เพื่อให้ทำงานต่อไปมิฉะนั้นคอนเทนเนอร์จะออก / หยุด ดังนั้นservice mysql start
คำสั่งปกติไม่สามารถใช้โดยตรงใน Dockerfile
สารละลาย
มีวิธีทั่วไปสามวิธีในการทำให้กระบวนการทำงานต่อไป:
สิ่งนี้มักเป็นที่ต้องการเมื่อคุณมีบริการเดียวที่กำลังทำงานเพราะทำให้สามารถเข้าถึงบันทึกเอาต์พุตที่นักเทียบท่าได้
สิ่งนี้ใช้ได้เฉพาะในกรณีที่มีสคริปต์เช่นmysqld_safe
นั้น
สิ่งนี้จะดีที่สุดหากคำสั่งต้องดำเนินการตามลำดับขั้นตอน/start.sh
ควรดำเนินการต่อ
บันทึก
สำหรับมือใหม่ที่supervisord
ไม่แนะนำให้ใช้ สุจริตมันเกินความจริง มันจะดีกว่ามากที่จะใช้บริการเดียว / คำสั่งเดียวสำหรับภาชนะ
BTW: โปรดตรวจสอบhttps://registry.hub.docker.comสำหรับรูปภาพ mysql docker ที่มีอยู่สำหรับการอ้างอิง