泽西岛灰熊HTTP服务器在集装箱docker内closures

我正试图在一个容器内执行一个Grizzly HTTP Server。

我的问题是,当我运行容器(使用docker-compose)容器在几秒钟后closures。

这是我的服务器Dockerfile

FROM alpine:3.5 MAINTAINER Maybe One <maybe@maybe.com> # Java Version and other ENV ENV JAVA_VERSION_MAJOR=8 \ JAVA_VERSION_MINOR=102 \ JAVA_VERSION_BUILD=14 \ JAVA_PACKAGE=jdk \ JAVA_JCE=standard \ JAVA_HOME=/opt/jdk \ PATH=${PATH}:/opt/jdk/bin \ GLIBC_VERSION=2.23-r3 \ LANG=C.UTF-8 RUN apk upgrade --update && \ apk add --update libstdc++ curl ca-certificates bash && \ for pkg in glibc-${GLIBC_VERSION} glibc-bin-${GLIBC_VERSION} glibc-i18n-${GLIBC_VERSION}; do curl -sSL https://github.com/andyshinn/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/${pkg}.apk -o /tmp/${pkg}.apk; done && \ apk add --allow-untrusted /tmp/*.apk && \ rm -v /tmp/*.apk && \ ( /usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 C.UTF-8 || true ) && \ echo "export LANG=C.UTF-8" > /etc/profile.d/locale.sh && \ /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib && \ mkdir /opt && \ curl -jksSLH "Cookie: oraclelicense=accept-securebackup-cookie" -o /tmp/java.tar.gz \ http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-b${JAVA_VERSION_BUILD}/${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz && \ gunzip /tmp/java.tar.gz && \ tar -C /opt -xf /tmp/java.tar && \ ln -s /opt/jdk1.${JAVA_VERSION_MAJOR}.0_${JAVA_VERSION_MINOR} /opt/jdk && \ if [ "${JAVA_JCE}" == "unlimited" ]; then echo "Installing Unlimited JCE policy" >&2 && \ curl -jksSLH "Cookie: oraclelicense=accept-securebackup-cookie" -o /tmp/jce_policy-${JAVA_VERSION_MAJOR}.zip \ http://download.oracle.com/otn-pub/java/jce/${JAVA_VERSION_MAJOR}/jce_policy-${JAVA_VERSION_MAJOR}.zip && \ cd /tmp && unzip /tmp/jce_policy-${JAVA_VERSION_MAJOR}.zip && \ cp -v /tmp/UnlimitedJCEPolicyJDK8/*.jar /opt/jdk/jre/lib/security; \ fi && \ sed -is/#networkaddress.cache.ttl=-1/networkaddress.cache.ttl=30/ $JAVA_HOME/jre/lib/security/java.security && \ apk del curl glibc-i18n && \ rm -rf /opt/jdk/*src.zip \ /opt/jdk/lib/missioncontrol \ /opt/jdk/lib/visualvm \ /opt/jdk/lib/*javafx* \ /opt/jdk/jre/plugin \ /opt/jdk/jre/bin/javaws \ /opt/jdk/jre/bin/jjs \ /opt/jdk/jre/bin/orbd \ /opt/jdk/jre/bin/pack200 \ /opt/jdk/jre/bin/policytool \ /opt/jdk/jre/bin/rmid \ /opt/jdk/jre/bin/rmiregistry \ /opt/jdk/jre/bin/servertool \ /opt/jdk/jre/bin/tnameserv \ /opt/jdk/jre/bin/unpack200 \ /opt/jdk/jre/lib/javaws.jar \ /opt/jdk/jre/lib/deploy* \ /opt/jdk/jre/lib/desktop \ /opt/jdk/jre/lib/*javafx* \ /opt/jdk/jre/lib/*jfx* \ /opt/jdk/jre/lib/amd64/libdecora_sse.so \ /opt/jdk/jre/lib/amd64/libprism_*.so \ /opt/jdk/jre/lib/amd64/libfxplugins.so \ /opt/jdk/jre/lib/amd64/libglass.so \ /opt/jdk/jre/lib/amd64/libgstreamer-lite.so \ /opt/jdk/jre/lib/amd64/libjavafx*.so \ /opt/jdk/jre/lib/amd64/libjfx*.so \ /opt/jdk/jre/lib/ext/jfxrt.jar \ /opt/jdk/jre/lib/ext/nashorn.jar \ /opt/jdk/jre/lib/oblique-fonts \ /opt/jdk/jre/lib/plugin.jar \ /tmp/* /var/cache/apk/* # Maven ENV MAVEN_VERSION 3.3.9 ENV MAVEN_HOME /usr/lib/mvn ENV PATH $MAVEN_HOME/bin:$PATH RUN wget http://ftp.fau.de/apache/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz && \ tar -zxvf apache-maven-$MAVEN_VERSION-bin.tar.gz && \ rm apache-maven-$MAVEN_VERSION-bin.tar.gz && \ mv apache-maven-$MAVEN_VERSION /usr/lib/mvn # Workspace ENV WORKSPACE /home/app/ RUN mkdir -p $WORKSPACE WORKDIR $WORKSPACE COPY . $WORKSPACE # Copy Server Project RUN mvn clean install -DskipTests ENTRYPOINT mvn exec:java 

泊坞窗,compose.yml

 version: '2.1' services: server: build: ./server/ ports: - "8080:8080" 

服务器docker日志

 ... maven... [INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ restful.littleapp --- Jan 30, 2017 2:10:18 PM org.glassfish.grizzly.http.server.NetworkListener start INFO: Started listener bound to [0.0.0.0:8080] Jan 30, 2017 2:10:18 PM org.glassfish.grizzly.http.server.HttpServer start INFO: [HttpServer] Started. Jersey app started with WADL available at http://0.0.0.0:8080/littleapp/application.wadl Hit enter to stop it... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 5.507 s [INFO] Finished at: 2017-01-30T14:10:18+00:00 Jan 30, 2017 2:10:18 PM org.glassfish.grizzly.http.server.NetworkListener shutdownNow INFO: Stopped listener bound to [0.0.0.0:8080] [INFO] Final Memory: 37M/90M [INFO] ------------------------------------------------------------------------ 

通常情况下,服务器必须听…

问题可能是你的主类在停止灰熊服务器之前正在等待input。 由于docker容器没有以交互模式运行,它将永远不会在命令行上得到input,并且System.in被终止。 mvn exec进程停止。

你应该find一种方法来保持灰熊服务器运行,而不用等待input。

就像是

 server.start(); Thread.currentThread().join(); // instead of System.in.read(); 

编辑 :似乎有这样的解决scheme已经描述这样grizzly-http-server-should-keep-running ,它也包含了一个正常的关机意味着一个shutdownhook。

Interesting Posts