2015-09-25 126 views
0

我將在Java Docker容器中託管由Java開發的TCP,UDP和HTTP服務器。Docker中的TCP,UDP和HTTP服務器在啓動容器後立即停止?

我在dockerfile中的所有內容都是用於服務器應用程序的複製命令和用於運行服務器的bash文件。

但是,服務器在運行容器後幾秒鐘停止?

我用下面的命令來運行容器:

docker run -d -p 8000:8000 -p 2701:2701 --name app_test_con_1 app_test_img_1

而且這是在dockerfile引導命令: CMD ["/workspace/one_click.sh"]

有什麼辦法讓服務器運行永遠?既然這樣做,如果我在主機操作系統中使用相同的.sh文件運行它;當然只要終端沒有關閉。

+0

*當然只要終端沒有關閉*。守護進程必須在啓動後立即從控制終端分離。 – hek2mgl

+0

但我用'-d'標誌運行容器,就像你在命令中看到的那樣,它不起作用! 我的意思是這句話是當我在不在容器中的主機運行它。 –

+0

碼頭日誌app_test_con_1的輸出是什麼?也許應用程序由於某些原因停止。 – Lexandro

回答

1

當前臺進程完成時,Docker容器將立即退出。這意味着如果您的one_click.sh腳本執行了類似service apache2 start的操作,然後退出,容器將立即退出。我們的大多數Java的圖像有以下防止這種的一些變種:

CMD service apache2 start && /bin/bash 

使用泊塢窗的首選方法是每個集裝箱1點的過程,如果你用它來運行虛擬機全面的服務,那麼你需要解決它。

+0

謝謝@凱文的回覆。我嘗試過這種方式,但它不工作;它也在運行數秒後關閉。 –

+0

哎呀,看起來像是我們的前景容器的舊模式。嘗試使用&&/usr/bin/tail -f/etc/hosts>/dev/null而不是bash。我不認爲背景中的容器有stdin打開,使bash立即返回。 –