debian中的Tomcat7:wheezy Docker实例无法启动

时间:2014-06-17 13:38:03

标签: debian tomcat7 docker boot2docker

我正在尝试使用谷歌的debian图像(google / debian:wheezy)首次构建一个docker镜像,在其上设置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安装上都得到了完全相同的行为(至少它是一致的,这有点令人印象深刻!)

查看/var/log/catalina.out不会显示任何错误,localhost也不会记录。

我使用正常的debian跟随相同的过程:wheezy图像并获得完全相同的失败而没有任何错误。 知道我搞砸了吗?

4 个答案:

答案 0 :(得分:7)

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

我的猜测是,你有一些网络问题,或者Debian的存储库存在一些问题,但是它们已得到修复。

在任何情况下,您都应该注意,只要指定的命令正在运行,容器就会运行。这意味着,您应该在前台运行tomcat或以其他方式确保相同的事情。您可以查看this answer以获取某些选项。

[编辑]

我已经创建了Dockerfile来测试它。这是:

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的“它的工作原理!” http://localhost:8080/

上的页面

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

我建议你从Dockerfile建立你的形象。这是更明确,一致和可维护的方式,如果在构建过程中出现某些错误,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。

答案 3 :(得分:1)

在Ubuntu下:Trusty以下docker run options解决了tomcat start问题(start-stop-daemon actualy)

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