如何在单一的码头工人容器运行Tomcat 8和MySQL

问题描述 投票:0回答:1

我有一个Tomcat 8 / MySQL的应用程序,我想在泊坞窗容器中运行。我今天运行的Ubuntu 16.04测试和生产,并希望使用的Ubuntu 16.04“最新”为基础FROM我的码头工人文件,并从那里添加Tomcat的8和MySQL。

我知道我能得到一个Tomcat 8泊坞窗文件从https://hub.docker.com/_/tomcat/我的基础,但我没有看到这些Ubuntu的基本操作系统,我想保持一致与Ubuntu。此外,它似乎有点怪到MySQL添加到Tomcat容器。

docker ubuntu-16.04 tomcat8
1个回答
0
投票

我通过这个问题的工作和我张贴我的研究结果情况下,它可以帮助其他人有类似的问题。

不建议在一个容器中运行multiple services(tomcat的/ MySQL的):简短的回答。是的,有supervisor.d等,但并不鼓励这样。还有baseimage-docker如果你是在一个容器致力于多种服务。

在这个答案的其余部分显示了如何得到它的工作,如果你真的确定?

在Ubuntu 16.04 Tomcat的8发行版本不幸只配置为作为服务(在下面详细描述)上运行。与运行在泊坞窗容器中的服务问题在整个堆叠交换很多帖子记录好(这是鼓励)。我可以通过添加一个“尾巴-f /var/log/tomcat8/catalina.out”到年底获得tomcat的8个工作作为服务“的服务tomcat8启动”命令,并开始与“--cap容器-add SYS_PTRACE”选项。

CMD service tomcat8 start && tail -f /var/log/tomcat8/catalina.out

开始tomcat8推荐的方法是在/usr/share/tomcat8/bin使用的命令。但是,发行版本的软链接是不正确的,服务器无法启动。

使用命令./catalina.sh run./startup.sh都产生错误,如这样的:

SEVERE: Cannot find specified temporary folder at /usr/share/tomcat8/temp   
WARNING: Unable to load server configuration from [/usr/share/tomcat8/conf/server.xml]
SEVERE: Cannot start server. Server instance is not configured.

该发行版跨/usr/share/tomcat8/var/lib/tomcat8用于分隔catalina.sh的bin文件(startup.shconfig)和logs/var/lib/tomcat8软链接分裂tomcat8。这使得这些命令将失败。

/usr/share/tomcat8文件:

root@85d5fe47b66a:/usr/share/tomcat8# ls -la
total 32
drwxr-xr-x   4 root root 4096 Mar  9 22:18 .
drwxr-xr-x 117 root root 4096 Mar  9 23:29 ..
drwxr-xr-x   2 root root 4096 Mar  9 22:18 bin
-rw-r--r--   1 root root   39 Mar 31  2017 defaults.md5sum
-rw-r--r--   1 root root 1929 Apr 10  2017 defaults.template
drwxr-xr-x   2 root root 4096 Mar  9 22:18 lib
-rw-r--r--   1 root root   53 Mar 31  2017 logrotate.md5sum
-rw-r--r--   1 root root  118 Apr 10  2017 logrotate.template

/var/lib/tomcat8文件:

root@85d5fe47b66a:/var/lib/tomcat8# ls -la
total 16
drwxr-xr-x  4 root    root    4096 Mar  9 22:18 .
drwxr-xr-x 41 root    root    4096 Mar  9 23:29 ..
lrwxrwxrwx  1 root    root      12 Sep 28 14:43 conf -> /etc/tomcat8
drwxr-xr-x  2 tomcat8 tomcat8 4096 Sep 28 14:42 lib
lrwxrwxrwx  1 root    root      17 Sep 28 14:43 logs -> ../../log/tomcat8
drwxrwxr-x  3 tomcat8 tomcat8 4096 Mar  9 22:18 webapps
lrwxrwxrwx  1 root    root      19 Sep 28 14:43 work -> ../../cache/tomcat8

运行./version.sh揭示了两者CATALINA_BASECATALINA_HOME设置为/usr/share/tomcat8

Using CATALINA_BASE:   /usr/share/tomcat8
Using CATALINA_HOME:   /usr/share/tomcat8
Using CATALINA_TMPDIR: /usr/share/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.32 (Ubuntu)
Server built:   Sep 27 2017 21:23:18 UTC
Server number:  8.0.32.0
OS Name:        Linux
OS Version:     4.4.0-116-generic
Architecture:   amd64
JVM Version:    1.8.0_161-b12
JVM Vendor:     Oracle Corporation

设置CATALINA_BASE明确地/var/lib/tomcat8catalina.sh使用./catalina.sh run启动Tomcat解决了这个问题。在过去,我或者添加软链接conflogswork/usr/share/tomcat8目录下,以便它可以找到这些文件,并用catalina.sh run命令正常启动。

顺便说一句,甚至认为JRE_HOME显然是错误的version.sh倾倒以上,该服务能够正常启动(当我追加tail -f命令如前面所述)。它也开始使用catalina.sh run当我手动添加正确的CATALINA_BASE变量catalina.sh。所以我花了没有时间寻找到为什么会错误地列了出来。

最后,我意识到三两件事:

  1. 不推荐运行multiple services(Tomcat的/ MySQL的)在一个容器中。是的,有supervisor.d等,但并不鼓励这样。还有baseimage-docker如果你是在一个容器致力于多种服务。
  2. 即使不建议在运行在一个容器中的单一服务,但有记载的方式,使其工作(我通过添加&& tail -f ...到CMD结束没有为tomcat8)。
  3. 在Ubuntu 16.04(没有测试其它发行版),使tomcat8运行的命令(不是服务),您需要:一)抓住tar文件为Tomcat 8和安装,因为它把所有文件的一个下目录,因此没有软链接的问题。或者,b)如果你坚持使用从易于得到,B.1的发行tomcat8),你需要通过添加catalina.sh修改版本CATALINA_BASE的,并将其复制到适当的安装目录或B.2)添加软链接。
© www.soinside.com 2019 - 2024. All rights reserved.