【问题标题】:How to run Tomcat 8 and MySQL in single Docker container如何在单个 Docker 容器中运行 Tomcat 8 和 MySQL
【发布时间】:2018-03-10 14:33:13
【问题描述】:

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

我知道我可以从https://hub.docker.com/_/tomcat/ 获得一个 Tomcat 8 docker 文件作为我的基础,但我没有看到用于这些的 Ubuntu 基础操作系统,我希望与 Ubuntu 保持一致。此外,将 MySQL 添加到 Tomcat 容器似乎很奇怪。

【问题讨论】:

    标签: docker ubuntu-16.04 tomcat8


    【解决方案1】:

    我解决了这个问题并发布了我的发现,以防它帮助其他有类似问题的人。

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

    如果你真的下定决心,这个答案的其余部分显示了我是如何让它工作的......

    不幸的是,Ubuntu 16.04 上的 Tomcat 8 发行版仅配置为作为服务运行(下面将详细介绍)。在 docker 容器中运行服务的问题在堆栈交换的许多帖子中都有很好的记录(不鼓励)。通过在“service tomcat8 start”命令的末尾添加“tail -f /var/log/tomcat8/catalina.out”并使用“--cap”启动容器,我能够让 tomcat 8 作为服务运行-添加 SYS_PTRACE" 选项。

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

    推荐的启动tomcat8的方法是使用/usr/share/tomcat8/bin中的命令。但是distro版本的软链接不正确导致服务器无法启动。

    使用命令./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.
    

    发行版将tomcat8 拆分为/usr/share/tomcat8/var/lib/tomcat8,从而将bin 文件(catalina.shstartup.sh)与configlogs 中的/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_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.sh内将CATALINA_BASE显式设置为/var/lib/tomcat8解决了使用./catalina.sh run启动tomcat的问题。过去,我在/usr/share/tomcat8 目录下添加了指向conflogswork 的软链接,以便它可以找到这些文件并使用catalina.sh run 命令正确启动。

    顺便说一句,即使上面的version.sh 转储中的JRE_HOME 明显错误,服务确实启动正确(当我如前所述附加tail -f 命令时)。当我手动将正确的CATALINA_BASE 变量添加到catalina.sh 时,它也开始使用catalina.sh run。所以我没有花时间研究为什么列出不正确。

    最后,我明白了三件事:

    1. 不建议在单个容器中运行multiple services (tomcat / mysql)。是的,有supervisor.d 等。但不鼓励这样做。如果您致力于在一个容器中提供多种服务,还有baseimage-docker
    2. 不建议在容器中运行单个服务,但有文档记录的方法可以使其工作(我通过在 CMD 末尾添加 && tail -f ... 为 tomcat8 做的)。
    3. 在 Ubuntu 16.04(未测试其他发行版)中,要使 tomcat8 作为命令(而非服务)运行,您需要: a) 获取 Tomcat 8 的 tar 文件并安装它,因为它将所有文件放在一个目录下,因此不存在软链接问题。或者,b) 如果你坚持使用来自 apt-get 的 distro tomcat8,b.1) 你需要通过添加 CATALINA_BASE 来修改 catalina.sh 的版本并将其复制到正确的安装目录或 b.2)添加软链接。

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      相关资源
      最近更新 更多