我正在尝试使用谷歌的debian图像(google / debian:wheezy)首次构建一个docker镜像,在其上设置OpenJDK7并尝试设置Tomcat7。
docker pull google/debian:wheezy
docker run -i -t google/debian:wheezy bash
一旦我在bash,我用
安装openjdkapt-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图像并获得完全相同的失败而没有任何错误。 知道我搞砸了吗?
答案 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