เพิ่มการตรวจสอบที่ด้านบนสุดของสคริปต์จุดเข้าใช้งานของคุณ
นักเทียบท่าจำเป็นต้องใช้สิ่งนี้เป็นคุณสมบัติใหม่ แต่นี่เป็นอีกหนึ่งตัวเลือกในการแก้ปัญหาสำหรับสถานการณ์ที่คุณมีจุดเข้าใช้งานซึ่งสิ้นสุดหลังจากประสบความสำเร็จหรือล้มเหลวซึ่งทำให้ยากต่อการดีบัก
หากคุณยังไม่มีสคริปต์จุดเข้าใช้งานให้สร้างสคริปต์ที่รันคำสั่งใดก็ได้ที่คุณต้องการสำหรับคอนเทนเนอร์ของคุณ จากนั้นที่ด้านบนของไฟล์นี้เพิ่มบรรทัดเหล่านี้ไปที่entrypoint.sh
:
# Run once, hold otherwise
if [ -f "already_ran" ]; then
echo "Already ran the Entrypoint once. Holding indefinitely for debugging."
cat
fi
touch already_ran
# Do your main things down here
เพื่อให้มั่นใจว่าcat
มีการเชื่อมต่ออยู่คุณอาจต้องระบุ TTY ฉันกำลังใช้คอนเทนเนอร์ด้วยสคริปต์จุดเข้าใช้งานของฉัน:
docker run -t --entrypoint entrypoint.sh image_name
สิ่งนี้จะทำให้สคริปต์รันหนึ่งครั้งสร้างไฟล์ที่ระบุว่ามันรันอยู่แล้ว (ในระบบไฟล์เสมือนของคอนเทนเนอร์) จากนั้นคุณสามารถรีสตาร์ทคอนเทนเนอร์เพื่อทำการดีบัก:
docker start container_name
เมื่อคุณรีสตาร์ทคอนเทนเนอร์already_ran
จะพบไฟล์ทำให้สคริปต์ Entrypoint หยุดทำงานด้วยcat
(ซึ่งจะรอตลอดไปสำหรับอินพุตที่จะไม่มา แต่จะทำให้คอนเทนเนอร์มีชีวิตอยู่) จากนั้นคุณสามารถเรียกใช้bash
เซสชันการดีบัก:
docker exec -i container_name bash
ในขณะที่คอนเทนเนอร์กำลังทำงานคุณยังสามารถลบalready_ran
และเรียกใช้entrypoint.sh
สคริปต์ด้วยตนเองอีกครั้งเพื่อรันใหม่หากคุณต้องการดีบักวิธีดังกล่าว