tomcat7无法在Ubuntu Docker容器中启动

托马斯·斯坦巴赫

初始情况

在Ubuntu(14.04 / 14.10)中,运行以下命令:

apt-get update && apt-get install tomcat7
service tomcat7 start

一方面,我按预期在VirtualBox VM和tomcat7 startet中进行了尝试:

vagrant init hashicorp/precise32
vagrant up

另一方面,我在Docker容器中尝试了此操作,如下所示:

sudo docker run -it --name tomcattest ubuntu bash

问题

那里,服务tomcat7 start命令输出[fail]。尽管如此,tomcat正在运行,但是/var/log/tomcat7/catalina.out表示以下内容:

Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 514 ms
Apr 16, 2015 5:52:41 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 16, 2015 5:52:41 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.52 (Ubuntu)
Apr 16, 2015 5:52:41 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT
Apr 16, 2015 5:52:42 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Apr 16, 2015 5:52:42 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1150 ms

搜索说明

谁能解释一下不同的行为,然后告诉我是否可以通过apt-get在docker容器内安装aptcat的简单方法而不会发出警告?

托马斯·斯坦巴赫

解决方案

tomcat启动脚本需要一些特殊权限。具体来说,它需要检查所有正在运行的进程,以验证自身是否正在运行。您可以赋予Docker容器以下特权,以使tomcat启动脚本成功退出:

sudo docker run --cap-add SYS_PTRACE -it ubuntu bash

重要的选项是--cap-add SYS_PTRACE,所有其他选项可能会有所不同。(至少一个)在docker github上讨论这个问题的问题:

https://github.com/docker/docker/issues/6800

后续问题

不过,我发现没有办法为镜像的docker构建设置此特权。我的最终目标是运行一个docker build,在其中执行Ansible剧本。由于服务启动,构建只是失败了,我不会从剧本中删除该服务。我将进行进一步的调查,但欢迎提出可能的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章