2015-07-21 33 views
8

Tôi có một cronjob chạy bên trong một container docker để kiểm tra xem tất cả các dịch vụ đang chạy như mong đợi. Nếu cronjob này xác định rằng có một vấn đề tôi muốn ngừng container Docker (từ bên trong ...)Dừng container docker từ bên trong

Thật không may exit chỉ dừng lại kịch bản cronjob tôi

+1

'shutdown -h now'? – zero323

+0

vùng chứa của bạn dựa trên hình ảnh nào? – Thomasleveil

+0

nó từ ubuntu: 12.04 –

Trả lời

2

Về cơ bản, bạn cần PID 1 để thoát để ngăn chặn sự thùng đựng hàng.

Ban đầu tôi nghĩ rằng kill -s SIGKILL 1 sẽ hoạt động, nhưng PID 1 được bảo vệ, vì vậy nó không hoạt động.

Theo đề xuất của @Thomasleveil, bạn có thể thêm mã như trap "exit" SIGINT SIGTERM vào tập lệnh PID 1, điều này có nghĩa là quá trình sẽ thoát khi được gửi kill -s SIGINT 1. Tôi hơi thích phương pháp này với phương pháp mà bạn đưa ra (giết chết quá trình con trực tiếp) vì nó cho quá trình cha mẹ có cơ hội để dọn dẹp và quá trình cha mẹ sẽ có thể tìm thấy PID của tiến trình con mà không bị lúng túng.

Tuy nhiên, nếu bạn đang chạy nhiều quy trình, bạn nên cân nhắc việc sử dụng thứ gì đó như giám sát hoặc runit.

+0

Tôi cũng nghĩ về điều đó, nhưng không thể làm cho nó hoạt động được. Bạn sẽ có một Dockerfile cho một showcase? – Thomasleveil

+0

Err, phải không? Có thông báo lỗi không? Người dùng cron hoạt động như thế nào? –

+0

Tôi đã thử với một kịch bản lệnh shell có nội dung là 'kill -s SIGKILL 1' + vòng lặp vô hạn/ngủ và làm cho trình docker chạy kịch bản lệnh shell đó khi bắt đầu (dưới dạng root). Vì vậy, tôi không có cron, chỉ là một kịch bản đơn giản chạy; có lẽ một quá trình không thể giết chính nó? Ngoài ra 'man 2 kill' dường như chỉ ra rằng lệnh kill từ chối gửi tín hiệu đến tiến trình nếu quá trình đó không xác định rõ ràng một trình xử lý cho tín hiệu cụ thể đó. – Thomasleveil

1

Tôi đã cố gắng giết quá trình 1 mà không thành công.

Hãy thử nhận xét về @ zero323 với shutdown -h now. Nó hoạt động tốt (xin lỗi, tôi không thể bỏ phiếu cho nó trực tiếp vì nó không có trong danh sách các câu trả lời).

+0

Đây là những gì xảy ra trong hình ảnh ubuntu mới nhất: > root @ b968bf313300:/# shutdown -h now Không kết nối được với xe buýt: Không có tệp hoặc thư mục nào Không thành công nói chuyện với init daemon. Và không có gì. –

Các vấn đề liên quan