我想在docker容器中运行Tomcat 8 / MySQL应用程序。我今天在测试和生产中运行Ubuntu 16.04,并且想要使用Ubuntu 16.04"最新的"作为我的docker文件的基础FROM
,并从那里添加Tomcat 8和MySQL。
我知道我可以从https://hub.docker.com/_/tomcat/获得一个Tomcat 8 docker文件作为我的基础,但我没有看到那些Ubuntu基础操作系统,我希望与Ubuntu保持一致。此外,将MySQL添加到Tomcat容器似乎很奇怪。
答案 0 :(得分:0)
我解决了这个问题并发布了我的调查结果,以防其他人遇到类似问题。
简短回答:不建议在单个容器中运行multiple services(tomcat / mysql)。是的,有supervisor.d等等。但这是不鼓励的。如果您致力于在一个容器中提供多个服务,那么还有baseimage-docker。
这个答案的其余部分显示了如果你真的有决心我是如何运作的......
不幸的是,Ubuntu 16.04上的Tomcat 8发行版仅配置为作为服务运行(详见下文)。在堆栈交换中的许多帖子中都很好地记录了在docker容器中运行服务的问题(不鼓励这样做)。通过添加" tail -f /var/log/tomcat8/catalina.out",我能够将tomcat 8作为服务工作。到了#34;服务tomcat8 start"命令并使用" - 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
之间拆分tomcat8,它将bin文件(catalina.sh
和startup.sh
)与config
和logs
分隔开来/var/lib/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_BASE
和CATALINA_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/tomcat8
catalina.sh
解决了使用./catalina.sh run
启动tomcat的问题。在过去,我已经在conf
目录下添加了logs
,work
和/usr/share/tomcat8
的软链接,以便它可以找到这些文件并使用{ {1}}命令。
catalina.sh run
转储中JRE_HOME
显然是错误的,服务也会正确启动(当我附加前面描述的version.sh
命令时)。当我手动将正确的tail -f
变量添加到catalina.sh run
时,它也会开始使用CATALINA_BASE
。所以我花了很长时间来研究为什么错误地列出来了。
最后,我意识到三件事:
catalina.sh
添加到CMD的末尾来为tomcat8做了这样的事情。)&& tail -f ...
来修改catalina.sh
的版本并将其复制到正确的安装目录或b.2)添加软链接。