了解了docker的用途之后,想再阿里云上部署tomcat的应用,遇到一些问题希望大神能给点指点
1.docker运行tomcat时如果是docker run -d -p模式的话命令后面加上tomcat的启动脚本,会在运行完脚本后停止运行,并不能成为守护进程,有什么方式能解决这个问题吗?
2.在第一个问题出现后想到用supervisord可以监控进行使docker不会退出守护,但是tomcat的启动脚本放到supervisord的命令里面总是执行失败,并不能启动tomcat
3.第二个问题出现后把tomcat的脚本修改为非守护进程,但是还是相同的错误
是我的思路有问题吗?希望能有使用过这种方式的高手给予帮助,在此多谢了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云上使用Docker部署Tomcat应用时,遇到您描述的问题,可以尝试以下方法来解决:
当你使用docker run -d -p命令启动容器时,实际上已经让Docker容器在后台运行了。问题可能出在您的Tomcat启动脚本上,确保脚本最后是让Tomcat作为守护进程运行的。通常,直接使用Tomcat镜像(如library/tomcat)不需要额外提供启动脚本,因为这些镜像自身就配置为以守护进程模式启动Tomcat。
例如,一个简单的启动命令可能是这样的:
docker run -d -p 8080:8080 tomcat:latest
这会拉取最新的Tomcat镜像(如果本地没有的话),并将其8080端口映射到宿主机的8080端口,然后在后台启动Tomcat。
如果您确实需要使用Supervisor来管理多个服务或想更精细地控制进程,首先确认您的Docker镜像中包含了Supervisor。您可以基于一个基础镜像创建自己的Dockerfile,并安装Supervisor。然后,编写一个supervisord.conf文件来定义要管理的服务,包括Tomcat。
确保您的Tomcat启动命令在supervisord配置中正确无误。一个常见的错误是路径问题,确保Tomcat的启动脚本或直接调用的命令与容器内的实际路径相匹配。
如果直接将Tomcat配置为非守护进程(即前台运行)并在Supervisor下管理,理论上应该能工作,但需注意的是,这样做可能会导致Supervisor认为Tomcat进程已退出,因为它监听的是进程的标准输出和标准错误流。确保您的supervisord配置中有适当的指令来处理前台运行的服务,比如设置autorestart=true和正确的stdout_logfile及stderr_logfile。
Dockerfile示例:
FROM tomcat:latest
RUN apt-get update && apt-get install -y supervisor && rm -rf /var/lib/apt/lists/*
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
supervisord.conf示例:
[program:tomcat]
command=/path/to/startup.sh # 确保这是正确的启动脚本路径
autostart=true
autorestart=true
stdout_logfile=/var/log/tomcat.stdout.log
stderr_logfile=/var/log/tomcat.stderr.log
user=root
请根据实际情况调整上述示例中的路径和命令。希望这些建议能帮助您解决问题!