tomcat7 - 无法在CoreOS上的容器内将Tomcat 7作为服务运行

标签 tomcat7 docker coreos

我正在尝试在Digital Ocean CoreOS机器上安装tomcat 7,但遇到一些问题,不确定如何解决。我在下面的由Digital Ocean提供的教程中设置Apache。

https://www.digitalocean.com/community/tutorials/how-to-create-and-run-a-service-on-a-coreos-cluster

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

docker run -i -t ubuntu:14.04 /bin/bash

我可以使用以下命令成功安装tomcat 7。 (我按照本教程在docker容器中设置了Tomcat 7:https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-ubuntu-14-04-via-apt-get)
sudo apt-get update 
sudo apt-get install 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

我将文件提交并加载到Fleet如下
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

我非常感谢您提供任何帮助。

非常感谢

阿塔科马人

最佳答案

我本来是建议您看看其他人做了什么,然后发现您在Docker Hub registry上发布了类似的问题。

您是否看过tutum / tomcat镜像使用的Docker文件?

  • https://github.com/tutumcloud/tutum-docker-tomcat/blob/master/7.0/Dockerfile
  • https://github.com/tutumcloud/tutum-docker-tomcat/blob/master/7.0/run.sh

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

    难以理解的是,Docker不是虚拟机,因此没有任何服务在运行。您必须显式运行docker进程或设置进程管理器(如runit或supervisor)。

    希望这可以帮助。

    关于tomcat7 - 无法在CoreOS上的容器内将Tomcat 7作为服务运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26095849/

    相关文章:

    docker - 仅在使用缓存的某个步骤之前重新运行 Docker?

    docker - 在Window上安装ingress-nginx的问题(不是minikube)

    docker - 将 Dockerfile 拆分为两个镜像

    hyper-v - Hyper-V 上的 Coreos,无法启动切换 root

    java - Tomcat ant任务执行错误

    java - 错误 "The matching wildcard is strict, but no declaration can be found for element ' 上下文 :annotation-config'"via tomcat7

    cloud-init - cloud-init 何时运行以及它如何找到其数据?

    ansible - 使用 Ansible Cloudformation 模块配置 CoreOS 集群

    java - 当出现内存不足错误时自动重启tomcat

    tomcat - 在门户网站上使用 SSL 和 Tomcat 时出错