Tôi đã thấy một loạt các hướng dẫn dường như làm điều tương tự mà tôi đang cố gắng thực hiện, nhưng vì một số lý do, các container Docker của tôi thoát ra. Về cơ bản, tôi đang thiết lập một máy chủ web và một vài trình tiện ích bên trong một container Docker. Tôi thực hiện các phần cuối cùng của điều này thông qua một tập lệnh bash được gọi là run-all.sh
tôi chạy qua CMD trong Dockerfile của tôi. run-all.sh
trông như thế này:
service supervisor start
service nginx start
Và tôi khởi động nó bên trong Dockerfile của mình như sau:
CMD ["sh", "/root/credentialize_and_run.sh"]
Tôi có thể thấy rằng tất cả các dịch vụ đều khởi động chính xác khi tôi chạy mọi thứ một cách thủ công (tức là truy cập vào hình ảnh với -i -t / bin / bash) và mọi thứ trông giống như nó chạy chính xác khi tôi chạy hình ảnh, nhưng nó đã thoát một lần nó kết thúc bắt đầu quá trình của tôi. Tôi muốn các quá trình chạy vô thời hạn, và theo như tôi hiểu, container phải tiếp tục chạy để điều này xảy ra. Tuy nhiên, khi tôi chạy docker ps -a
, tôi thấy:
➜ docker_test docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones
Đưa cái gì? Tại sao nó thoát? Tôi biết tôi chỉ có thể đặt một vòng lặp while vào cuối tập lệnh bash của mình để giữ cho nó tiếp tục, nhưng cách đúng đắn để giữ cho nó không thoát ra là gì?