Tomcat7 无法在CoreOS上的容器内运行Tomcat 7 as服务

Tomcat7 无法在CoreOS上的容器内运行Tomcat 7 as服务,tomcat7,docker,coreos,Tomcat7,Docker,Coreos,我试图在Digital Ocean CoreOS机器上安装tomcat 7,但遇到了一些问题,不知道如何解决。下面是Digital Ocean提供的安装Apache的教程 我创建了docker容器,并使用以下命令运行它 docker run -i -t ubuntu:14.04 /bin/bash 通过使用以下命令,我成功地安装了Tomcat7。(我按照本教程在docker容器中设置Tomcat7:) 然后我可以创建名为tomcat@.service [Unit] Description=

我试图在Digital Ocean CoreOS机器上安装tomcat 7,但遇到了一些问题,不知道如何解决。下面是Digital Ocean提供的安装Apache的教程

我创建了docker容器,并使用以下命令运行它

docker run -i -t ubuntu:14.04 /bin/bash
通过使用以下命令,我成功地安装了Tomcat7。(我按照本教程在docker容器中设置Tomcat7:)

然后我可以创建名为tomcat@.service

[Unit] 
Description=Tomcat 7 web server service 
After=etcd.service After=docker.service     
Requires=tomcat-discovery@%i.service

[Service] 
TimeoutStartSec=0 KillMode=none 
EnvironmentFile=/etc/environment 
ExecStartPre=-/usr/bin/docker kill tomcat%i 
ExecStartPre=-/usr/bin/docker rm tomcat%i 
ExecStartPre=/usr/bin/docker pull attacomsian/tomcat 
ExecStart=/usr/bin/docker run –name tomcat%i -p ${COREOS_PUBLIC_IPV4}:%i:8080 attacomsian/tomcat `service tomcat7 start` -D FOREGROUND 
ExecStop=/usr/bin/docker stop tomcat%i

[X-Fleet]
X-Conflicts=tomcat@*.service
然后我创造了tomcat-discovery@.service在Etcd中注册服务状态,如下所示

[Unit] 
Description=Announce Tomcat@%i service 
BindsTo=tomcat@%i.service

[Service] 
EnvironmentFile=/etc/environment
ExecStart=/bin/sh -c “while true; do etcdctl set /announce/services/tomcat%i ${COREOS_PUBLIC_IPV4}:%i –ttl 60; sleep 45; done” 
ExecStop=/usr/bin/etcdctl rm /announce/services/tomcat%i

[X-Fleet]
X-ConditionMachineOf=tomcat@%i.service
我提交并加载文件到舰队如下

fleetctl submit tomcat@.service tomcat-discovery@.service

fleetctl load tomcat@8080.service

fleetctl load tomcat-discovery@8080.service
到目前为止一切顺利。我没有看到任何错误。但当我尝试运行以下服务时

fleetctl start tomcat@8080.service
但它并没有开始。我看它好像死了一样

我对CoreOS还不熟悉,还在学习。我在Digital Ocean管理服务器,对此我非常了解。我在谷歌上搜索了这个问题,但没有找到任何帮助。我个人认为这句话实际上是造成麻烦的原因

ExecStart=/usr/bin/docker run –name tomcat%i -p ${COREOS_PUBLIC_IPV4}:%i:8080 attacomsian/tomcat `service tomcat7 start` -D FOREGROUND
我真的很感激任何人能帮我把这个弄上去

非常感谢


Attacomsian

我正要去,建议你看看其他人做了什么,然后发现你在网站上发布了一个类似的问题

你看过tutum/tomcat图像使用的Docker文件了吗

它运行一个名为“run.sh”的脚本,该脚本在前台运行tomcat

很难理解的是Docker不是一个虚拟机,因此没有运行任何服务。您必须显式运行docker进程,或者设置一个进程管理器,如runit或supervisord


希望这能有所帮助。

非常感谢。我能够确定是tomcat不是在容器内启动的。我试着在容器内运行tomcat只是为了测试,它给了我以下已经在使用的错误地址:8080,然后我试着在另一个端口上运行它,但每次都得到相同的错误:地址已经在使用中。这对我来说真的很奇怪。你知道为什么吗?当你创建一个docker容器时,默认情况下当容器停止运行时,它不会被删除。这意味着端口仍然绑定到容器,这就是为什么不能重用它。移除容器将再次释放端口。好的。我手动停止并删除了所有现有的容器,但当我尝试使用docker run--name tomcat88-p${COREOS_PUBLIC_IPV4}:8888:9999 attacomsian/tomcat服务tomcat7 start-D前台再次运行它时,它再次失败。我认为问题出在我安装的tomcat7包中。
ExecStart=/usr/bin/docker run –name tomcat%i -p ${COREOS_PUBLIC_IPV4}:%i:8080 attacomsian/tomcat `service tomcat7 start` -D FOREGROUND