docker compose不会启动容器内的服务

时间:2017-10-18 01:24:24

标签: tomcat docker docker-compose docker-entrypoint

我实际上在使用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

这是我在cs_tomcat中创建的Dockerfile

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 "$@";

有人可以在这看到任何错误吗?任何有关这方面的帮助都会非常值得注意。

1 个答案:

答案 0 :(得分:0)

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

official image使用catalina.sh run启动Tomcat,因此请不要覆盖命令或入口点。

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