2016-03-05 44 views
5

Tôi đang cố tạo vùng chứa docker bằng cách sử dụng dockerfile trong đó script-entry.sh sẽ được thực thi khi các vùng chứa bắt đầu và script-exit.sh được thực thi khi vùng chứa dừng lại.Chạy tập lệnh khi docker bị dừng

ENTRYPOINT đã giúp hoàn thành phần đầu tiên của sự cố khi script-entry.sh chạy khi khởi động.

Làm cách nào để đảm bảo tập lệnh script-exit.sh được thực hiện trên lối ra/dừng của docker?

+0

Daemon trình ghi nhật ký mọi thứ, tại sao không viết tập lệnh/chương trình phân tích cú pháp nhật ký và khi containerID dừng xuất hiện, hãy thực thi tập lệnh bạn muốn. – Auzias

+0

@Auzias Có [api sự kiện] (https://gliderlabs.com/blog/2015/04/14/docker-events-explained/) và ['events'] (https: //docs.docker. com/engine/reference/commandline/events /) lệnh được xây dựng trong docker sẽ phù hợp hơn với các tác vụ như vậy – Matt

+0

@Auzias cũng chạy một thứ gì đó sau sự kiện dừng sẽ có khả năng không thể chạy hoặc bị gián đoạn. – Matt

Trả lời

8

docker stop gửi tín hiệu SIGTERM đến quy trình chính chạy bên trong vùng chứa Docker (tập lệnh nhập). Vì vậy, bạn cần một cách để bắt tín hiệu và sau đó kích hoạt tập lệnh thoát.

Xem This link cho lời giải thích trên tín hiệu bẫy và một ví dụ (gần cuối trang)

0

Tạo một kịch bản, và lưu nó như một tập tin bash, có chứa rằng sau:

$CONTAINER_NAME="someNameHere" 
docker exec -it $CONTAINER_NAME bash -c "sh script-exit.sh" 
docker stop $CONTAINER_NAME 

Chạy tệp đó thay vì chạy docker stop và điều đó sẽ thực hiện thủ thuật. Bạn cũng có thể thiết lập bí danh cho điều đó.

Để tự động hóa nó bên trong Docker, tôi chưa từng thấy nó trước đây. Chúc may mắn tìm ra nó, nếu đó là con đường bạn muốn đi.

+3

Nó không trả lời câu hỏi. Câu hỏi đặt ra là: "cách thực thi một tập lệnh khi một vùng chứa bị dừng", khác với "cách thực thi tập lệnh và sau đó dừng vùng chứa" – Auzias

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