Tôi đã chạy vùng chứa docker ubuntu chỉ với một tập lệnh bash bên trong. Tôi muốn bắt đầu ứng dụng của tôi bên trong container với Docker exec như thế:Tại sao docker exec đang giết quá trình nohup khi thoát?
docker exec -it 0b3fc9dd35f2 ./main.sh
Bên trong kịch bản chính tôi muốn chạy một ứng dụng khác với nohup vì đây là một ứng dụng đang chạy dài:
#!/bin/bash
nohup ./java.sh &
#with this strange sleep the script is working
#sleep 1
echo `date` finish main >> /status.log
Các java .sh script là như sau (để đơn giản nó là một kịch bản giả):
#!/bin/bash
sleep 10
echo `date` finish java >> /status.log
Vấn đề là java.sh bị giết ngay sau khi docker exec trả về. Câu hỏi đặt ra là tại sao?
Giải pháp duy nhất tôi phát hiện ra là thêm một số giả sleep 1
vào tập lệnh đầu tiên sau khi nohup được bắt đầu. Hơn quá trình thứ hai đang chạy tốt. Bạn có bất kỳ ý tưởng tại sao nó như thế?
[EDIT]
giải pháp thứ hai là thêm một số echo
hoặc trap
lệnh để java.sh
kịch bản ngay trước khi ngủ. Hơn nó hoạt động tốt. Thật không may tôi không thể sử dụng workaround này thay vì kịch bản này tôi có quá trình java.
Bạn không bắt đầu một container với 'Docker exec', nhưng với một 'docker run' và bạn nên xem xét kỹ các chỉ thị' CMD' và 'ENTRYPOINT' trong một Do ckerfile – user2915097
Tôi đã chạy vùng chứa với quy trình khác. Với docker exec tôi muốn bắt đầu một thứ hai. Đây là kịch bản tích hợp tiếp tục, do đó chúng tôi muốn có nhiều quy trình hơn trong một vùng chứa. –