泊坞窗撰写不启动容器内的服务
我实际上在使用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,那么Docker将无法为你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