1

我实际上在使用 docker-compose 启动 tomcat 服务时遇到了麻烦。

这是docker-compose.yml我正在使用的

version: '3.0'
services:
 tomcat:
  build: ./docker/cs_tomcat
  container_name: tomcat-container
  ports:
   - "8080:8080"
  entrypoint:
   - bash
  stdin_open: true
  tty: true

这是Dockerfile我在 cs_tomcat 中创建的,

FROM tomcat:7.0.82-jre8
RUN apt-get update && apt-get -y upgrade
WORKDIR /usr/local/tomcat
COPY /cs.war /usr/local/tomcat/webapps/cs.war
RUN apt-get update && apt-get install -y dos2unix
EXPOSE 8080
COPY tomcat-users.xml /usr/local/tomcat/conf/
COPY file.xml /usr/local/tomcat/webapps/cs/conf/services/
COPY file2.xml /usr/local/tomcat/webapps/cs/conf/quartz/
COPY test.properties /usr/local/tomcat/conf/
ENV JAVA_OPTS="-Xms2G -Xmx2G"
# Copy Entrypoint script in the container
COPY ./docker-entrypoint.sh / 
ENTRYPOINT ["/docker-entrypoint.sh"]

当我使用以下单独运行此 docker 文件时,一切正常

$ docker run -dit -p 8080:8080 app1 /bin/bash

当我使用以下命令构建和启动 docker 容器docker-compose时,容器启动,但 tomcat 服务没有启动。

$ docker-compose up -d --build

这是我的docker-entrypoint.sh文件

#!/usr/bin/env bash
 /usr/local/tomcat/bin/catalina.sh start 
 #wait
 #Extra line added in the script to run all command line arguments
exec "$@";

任何人都可以在这里看到任何错误吗?对此的任何帮助都将是非常可观的。

4

1 回答 1

0

您应该将 Tomcat 作为容器中的主要进程运行,而不是bash. 如果您在后台运行 tomcat,那么 Docker 将无法为您管理服务。

官方镜像启动 Tomcat 时,catalina.sh run不要覆盖命令或入口点。

services:
 tomcat:
  build: ./docker/cs_tomcat
  container_name: tomcat-container
  ports:
   - "8080:8080"

Dockerfile

FROM tomcat:7.0.82-jre8
RUN set -uex; \
    apt-get update; \ 
    apt-get -y upgrade; \
    apt-get install -y dos2unix
WORKDIR /usr/local/tomcat
COPY /cs.war /usr/local/tomcat/webapps/cs.war
EXPOSE 8080
COPY tomcat-users.xml /usr/local/tomcat/conf/
COPY file.xml /usr/local/tomcat/webapps/cs/conf/services/
COPY file2.xml /usr/local/tomcat/webapps/cs/conf/quartz/
COPY test.properties /usr/local/tomcat/conf/
ENV JAVA_OPTS="-Xms2G -Xmx2G"

然后如果你想使用 bash shell,一旦tomcat容器启动,运行

docker-compose exec tomcat bash
于 2017-10-19T03:56:34.023 回答