泊坞窗撰写不启动容器内的服务

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

当我使用下面的命令来构build并使用docker-compose来启动Docker容器时,容器开始了,但是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 "$@"; 

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

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

官方的图片启动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