我实际上在使用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 "$@";
有人可以在这看到任何错误吗?任何有关这方面的帮助都会非常值得注意。
答案 0 :(得分:0)
您应该将Tomcat作为容器中的主要进程而不是bash
运行。如果你在后台运行tomcat,那么Docker将无法为你管理服务。
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