在debian Tomcat7:wheezy Docker实例无法启动

我正在尝试使用Google的debian图像(google / debian:wheezy)第一次构buildDocker镜像,在其上设置OpenJDK7并尝试设置Tomcat7。

docker pull google/debian:wheezy docker run -i -t google/debian:wheezy bash 

一旦我在bash中,我安装openjdk

 apt-get update apt-get install openjdk-7-jre 

过了一段时间,我得到一个错误,我必须跑

  apt-get update --fix-missing apt-get install openjdk-7-jre apt-get install tomcat7 

Tomcat7安装后,我尝试启动它

 /etc/init.d/tomcat7 start 

这给了我以下错误:

 [FAIL] Starting Tomcat servlet engine: tomcat7 failed! 

我显然做错了,我在Debian Docker安装和OSX Docker安装上都得到了完全相同的行为(至less它是一致的,这有点令人印象深刻!)

查看/var/log/catalina.out不会显示任何错误,本地主机日志也不会显示。

我已经用一个正常的debian:wheezy image并且没有任何错误地得到完全相同的失败。 任何想法,我搞砸了?

我试过你的步骤,并能够运行tomcat就好了。 我没有得到apt-get的问题,所以现在apt-get update --fix-missing是必需的。 我甚至从init.d脚本启动tomcat,它的工作。

我的猜测是,你有一些networking问题,或者Debian的软件库存在一些问题,但是他们已经修复了。

无论如何,你应该注意,只要指定的命令正在运行,容器就在运行。 这意味着你应该在前台运行tomcat,或者以另一种方式确保同样的事情。 你可以检查这个答案的一些选项。

[编辑]

我已经创build了一个Dockerfile来testing这个。 这里是:

 FROM google/debian:wheezy RUN apt-get update RUN apt-get install -y openjdk-7-jre tomcat7 ADD run.sh /root/run.sh RUN chmod +x /root/run.sh EXPOSE 8080 CMD ["/root/run.sh"] 

这里是它使用的run.sh脚本:

 #!/bin/bash /etc/init.d/tomcat7 start # The container will run as long as the script is running, that's why # we need something long-lived here exec tail -f /var/log/tomcat7/catalina.out 

这是一个示例生成和运行会话:

 $ docker build -t tomcat7-test . $ docker run -d -p 8080:8080 tomcat7-test 

现在你应该可以看到tomcat的“It works!” 在http://localhost:8080/

你可以在你的Dockerfile中使用service tomcat start ,只需在docker run命令中添加–privileged = true参数即可。 Tomcat需要扩展权限。

更多信息: https : //docs.docker.com/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration

我build议你从Dockerfilebuild立你的图像。 这是更明确,一致和可维护的,如果在构build过程中出现错误,docker将输出错误。

Dockerfile的开始将是,例如:

 FROM google/debian:wheezy MAINTAINER Jan Vladimir Mostert <JanVladimirMostert@example.com> RUN apt-get -qq update RUN apt-get install openjdk-7-jre RUN apt-get install tomcat7 

因此你可以在Dockerfile中启动tomcat。

在Ubuntu下:Trusty下面的docker运行选项解决了tomcat start的问题(start-stop-daemon actualy)

 docker run -itd --cap-add=SYS_PTRACE --security-opt=apparmor:unconfined mytomcat7image