2

我第一次尝试使用来自 Google 的 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 没有显示任何错误,本地主机日志也没有。

我对普通的 debian:wheezy 映像执行了相同的过程,并得到完全相同的失败而没有任何错误。知道我在哪里搞砸了吗?

4

4 回答 4

8

我尝试了您的步骤,并且能够很好地运行tomcat。我没有得到 apt-get 的问题,所以现在apt-get update --fix-missing是必需的。我什至从 init.d 脚本启动了 tomcat,它工作正常。

我的猜测是,要么是您遇到了一些网络问题,要么是 Debian 的存储库存在一些问题,但它们都得到了修复。

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

[编辑]

我创建了一个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的“It works!” 上页http://localhost:8080/

于 2014-06-19T15:13:27.333 回答
3

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

请务必了解此标志的安全含义。更多信息在这里:https ://docs.docker.com/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration

于 2015-02-19T09:58:06.537 回答
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。

于 2014-06-17T13:53:22.520 回答
1

在 Ubuntu 下:Trusty 以下 docker run 选项解决了 tomcat 启动的问题(实际上是 start-stop-daemon)

docker run -itd --cap-add=SYS_PTRACE --security-opt=apparmor:unconfined mytomcat7image
于 2015-03-19T12:24:34.013 回答