我将在Java docker容器中托管由Java开发的TCP,UDP和HTTP服务器。
dockerfile
中的所有内容都是服务器应用程序的复制命令和用于运行服务器的bash
文件。
但是,服务器在运行容器后几秒钟停止了?
我使用以下命令来运行容器:
docker run -d -p 8000:8000 -p 2701:2701 --name app_test_con_1 app_test_img_1
这是dockerfile
中的bootstrap命令:
CMD ["/workspace/one_click.sh"]
有没有办法让服务器永远运行?因为如果我在主机操作系统中使用相同的.sh
文件运行它,它会这样做;当然只要终端没有关闭。
答案 0 :(得分:1)
Docker容器将在前台进程完成后立即退出。这意味着如果您的one_click.sh
脚本执行service apache2 start
之类的操作然后退出,则容器将立即退出。我们的大多数Java映像都有以下的一些变体来防止这种情况:
CMD service apache2 start && /bin/bash
使用Docker的首选方法是每个容器1个进程,如果您使用它来运行带有服务的完整虚拟机,那么您需要解决它。