Docker中的TCP,UDP和HTTP服务器在启动容器后立即停止?

问题描述:

我将在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

当前台进程完成时,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立即返回。 –