Có phải là docker dừng các nỗ lực để ngăn chặn quá trình chạy bên trong container theo đúng cách, trong khi docker kill sẽ gửi tín hiệu kill?
Về cơ bản là có, sự khác biệt là tinh tế, nhưng được nêu trong tham chiếu Dòng lệnh :
- docker stop : Dừng một container đang chạy ( gửi SIGTERM, và sau đó SIGKILL sau thời gian gia hạn ) [...] Quá trình chính bên trong container sẽ nhận được SIGTERM, và sau một thời gian ân hạn, SIGKILL. [nhấn mạnh của tôi]
- Giết docker : Giết một container đang chạy ( gửi SIGKILL hoặc tín hiệu được chỉ định ) [...] Quá trình chính bên trong container sẽ được gửi SIGKILL hoặc bất kỳ tín hiệu nào được chỉ định với tùy chọn --signal. [nhấn mạnh của tôi]
Vì vậy, stop
cố gắng kích hoạt tắt máy duyên dáng bằng cách gửi tín hiệu POSIX tiêu chuẩn SIGTERM
, trong khi kill
chỉ giết theo quy trình theo mặc định (nhưng cũng cho phép gửi bất kỳ tín hiệu nào khác):
Tín hiệu SIGTERM được gửi đến một quy trình để yêu cầu chấm dứt. Không giống như tín hiệu SIGKILL, nó có thể bị bắt và giải thích hoặc bỏ qua bởi quy trình. Điều này cho phép quá trình thực hiện chấm dứt tốt đẹp giải phóng tài nguyên và lưu trạng thái nếu thích hợp. Cần lưu ý rằng SIGINT gần giống với SIGTERM.
Mặc dù không được thi hành trong mọi trường hợp, các quy trình thường được mong đợi sẽ xử lý SIGTERM
một cách duyên dáng và thực hiện đúng tùy thuộc vào trách nhiệm của chúng - điều này có thể dễ dàng thất bại do nỗ lực tắt máy duyên dáng mất nhiều thời gian hơn thời gian ân hạn, đó là điều cần xem xét nếu tính toàn vẹn dữ liệu là tối quan trọng (ví dụ cho cơ sở dữ liệu); xem ví dụ SIGTERM của Major Hayden so với SIGKILL để được giải thích chi tiết hơn:
Ứng dụng có thể xác định những gì nó muốn làm sau khi nhận được SIGTERM. Trong khi hầu hết các ứng dụng sẽ dọn sạch tài nguyên của họ và dừng lại, một số có thể không. Một ứng dụng có thể được cấu hình để làm một cái gì đó hoàn toàn khác khi nhận được SIGTERM. Ngoài ra, nếu ứng dụng ở trạng thái xấu, chẳng hạn như chờ vào I / O của đĩa, nó có thể không thể hoạt động theo tín hiệu được gửi.