我在Docker中运行tomcat,但是当我closuresterminal时,它停止了,所以如何让它继续运行

我在Docker中运行Tomcat服务器8,当我使用docker run命令运行并且命令提示符不回来时,它运行正常,现在我按ctrl + c并提示回来,但是现在tomcat服务器已经停止,所以当我检查在http:// localhost:8080上不出现tomcat页面。 那么如何使它在容器中连续运行或称为系统级进程。 这是我的docker文件。 帮助我这个

FROM scratch FROM ubuntu:16.04 RUN mkdir /opt/java8 RUN mkdir /opt/tomcat8 ENV JAVA_HOME /opt/java8 ENV CATALINA_HOME /opt/tomcat8 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin ADD jdk1.8.0_112 /opt/java8 ADD apache-tomcat-8.0.38 /opt/tomcat8 ADD M_UserTP.war /opt/tomcat8/webapps EXPOSE 8080 CMD ["catalina.sh", "run"] 

运行startup.sh甚至不能帮助我。

docker run区分前景分离模式( 源 )。 您的问题是由于您在前台模式下运行容器而造成的。 要在后台运行它作为守护进程,请使用分离模式:

docker run -d [IMAGE] [COMMAND]

这将在后台启动容器,只要内部进程继续运行,就会保持运行。 您可以通过查看日志( docker logs [CONTAINER_ID] )或通过跳转到容器内的shell( docker exec -it [CONTAINER_ID] /bin/sh )来查看容器内部发生了什么。

如果你已经完成了容器的工作,使用docker stop [CONTAINER_ID]来停止它。 如果您不确定是否有容器正在运行,请使用docker ps

有两种方法可以进入正在运行的容器:

1) 附加到过程/容器

用于使用容器的ID或名称将terminal的标准input,输出和错误附加到正在运行的容器。 这允许您查看其正在进行的输出或交互式地控制它,就像命令直接在terminal中运行一样。

要停止容器,请使用CTRL-c。 该键序列将SIGKILL发送到容器。 您可以使用CTRL-CTRL-q键序列从容器中分离并保持运行状态。

 # docker run -it ubuntu:15.0 /bin/bash root@9391b08536ae:/# # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9391b08536ae ubuntu:15.0 "/bin/bash" 6 seconds ago Up 6 seconds 0/tcp confident_albattani # docker attach 939 root@9391b08536ae:/# root@9391b08536ae:/# exit exit root@labadmin-VirtualBox:~/RAGHU/python# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 

2) 执行容器

docker exec命令在正在运行的容器中运行新命令。

 # docker exec -it 939 /bin/bash root@9391b08536ae:/# exit exit # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9391b08536ae ubuntu:15.0 "/bin/bash" 25 seconds ago Up 25 seconds 0/tcp confident_albattani 

希望这可以帮助。

而不是ctrl + c ,你应该inputctrl + pctrl + q来分离