Thêm một kiểm tra vào đầu tập lệnh Entrypoint của bạn
Docker thực sự cần phải thực hiện điều này như một tính năng mới, nhưng đây là một tùy chọn giải pháp khác cho các tình huống mà bạn có Entrypoint chấm dứt sau thành công hoặc thất bại, điều này có thể gây khó khăn cho việc gỡ lỗi.
Nếu bạn chưa có tập lệnh Entrypoint, hãy tạo tập lệnh chạy bất kỳ lệnh nào bạn cần cho vùng chứa của mình. Sau đó, ở đầu tệp này, thêm các dòng này vào 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
Để đảm bảo cat
giữ kết nối, bạn có thể cần cung cấp TTY. Tôi đang chạy container với tập lệnh Entrypoint của mình như vậy:
docker run -t --entrypoint entrypoint.sh image_name
Điều này sẽ khiến tập lệnh chạy một lần, tạo một tệp cho biết nó đã chạy (trong hệ thống tệp ảo của bộ chứa). Sau đó, bạn có thể khởi động lại container để thực hiện gỡ lỗi:
docker start container_name
Khi bạn khởi động lại bộ chứa, already_ran
tập tin sẽ được tìm thấy, khiến tập lệnh Entrypoint bị đình trệ cat
(chỉ chờ mãi cho đầu vào sẽ không bao giờ đến, nhưng giữ cho bộ chứa tồn tại). Sau đó, bạn có thể thực hiện bash
phiên gỡ lỗi :
docker exec -i container_name bash
Trong khi container đang chạy, bạn cũng có thể loại bỏ already_ran
và thực hiện thủ công entrypoint.sh
tập lệnh để chạy lại nó, nếu bạn cần gỡ lỗi theo cách đó.