如何使服务在Docker容器上运行

时间:2016-03-21 09:44:08

标签: docker

我正在尝试运行一个安装了我的Web应用程序的简单docker容器(不使用docker文件)。 在测试期间,我总是使用-t -i选项运行容器,然后通过运行shell脚本启动其中的tomcat服务。 当我转向生产时,我不想再使用-t -i选项,只需要我的Tomcat服务启动并成为唯一的主要服务。

我尝试将入口点指向启动脚本以启动tomcat,但容器在该脚本完成后终止。 如何运行容器,启动服务并将该服务保留为容器的单个主要服务?

注意:我读了一些关于主管的帖子,但不确定如果我走这条路,是否需要从头开始构建我的图像?我宁愿不这样做。

有什么建议吗?

3 个答案:

答案 0 :(得分:11)

如果你有一个使用入口点模式的Dockerfile,它将如下所示:

(Dockerfile)

FROM ubuntu

...Some configuration steps...

add start.sh /start.sh

ENTRYPOINT ["/start.sh"]

您需要做的就是确保start.sh脚本已挂起'某种程度上来说。有些人喜欢拖尾系统日志,但拖尾任何存在的文件都会有效。

(start.sh)

#!/bin/bash

service Your_Service_Or_Whatever start
tail -f /var/log/dmesg

答案 1 :(得分:2)

较短的版本:

FROM ubuntu

...Some configuration steps...

ENTRYPOINT ["/bin/sh", "-c", "while true; do sleep 1; done"]

使用Docker版本1.12.1进行测试,构建23cf638

使用docker --version查找您的版本

答案 2 :(得分:1)

默认情况下,Docker容器将根据映像Dockerfile中的配置运行。如果您通常运行带有-i标志的容器,则将STDIN保持打开状态,允许您访问容器入口点,或者它可以是bash shell。为了实现您的目标,您可以在分离状态下运行容器,将命令直接传递给docker run。

docker run -d myapp /opt/catalina/bin/startup.sh

这将使myapp容器处于分离状态,并将运行作为第3个参数传递的命令。如果命令导致长期服务,则只要服务是,容器就会保持活动状态。

This is explained in detail in the docs