2016-11-10 53 views
0

码头必须在构建阶段启动java/undertow应用程序,并且它应该在运行阶段可用。然而,在启动java进程后,与启动java服务器相关的容器更改不会持久。码头集装箱不能在后台启动Java

因此,在此步骤中所做的更改不会影响图像。

在我的搬运工文件最后的命令是

RUN java -jar /svc/app/svc-0.0.1-SNAPSHOT.jar $2>server.log & sleep 5 

当我运行这个容器我可以看到在server.log文件确认服务器启动成功

StartServices  - Services Started 

但是,当存在输出I运行容器没有服务正在运行。我可以手动启动它,但这不是我想要做到的。我希望我的服务器在容器启动时启动。

通知

& sleep 5 

如果我不等待,这5秒钟这将是没有任何日志中创建。 Docker会立即放弃这一步,而不会让我的Java应用程序启动。

但即使“睡眠5”让我的应用程序启动,码头工仍然忽略图像中的更改并且不应用它们。

所以,当我做“码头运行”我的应用程序没有运行。

这里是Dockerfile:

FROM anapsix/alpine-java 
ENV TC_BASE=/opt/tc_base 
ENV APP_BASE=$TC_BASE/svc 
ENV PATH=.:$PATH 


RUN apk update && apk add unzip 


COPY files/build/lib/svc/target/svc-0.0.1-SNAPSHOT-bin.zip $APP_BASE/ 
COPY files/build/lib/api/src/main/resources/api.properties $TC_BASE/conf/api/ 
COPY files/build/lib/svc/src/main/resources/svc.properties $TC_BASE/conf/svc/ 
COPY files/build/lib/svc/src/main/resources/logback.xml $TC_BASE/conf/svc/ 

RUN cd $APP_BASE ; unzip -q svc-0.0.1-SNAPSHOT-bin.zip ; rm svc-0.0.1-SNAPSHOT-bin.zip ; mv svc-0.0.1-SNAPSHOT/* . ; rm -rf svc-0.0.1-SNAPSHOT 

EXPOSE 7009 

RUN java -jar $TC_BASE/svc/app/svc-0.0.1-SNAPSHOT.jar $2>server.log & sleep 5 
+0

如果没有正在等待的进程,Docker将始终停止容器。你应该'尾巴-f server.log' –

+0

我们正在谈论建设形象。在这个阶段没有人对服务器日志感兴趣。如果我做了tail -f server.log,那么构建过程将永远不会结束。 Java过程应作为图像设置的一部分在后台运行。 –

+3

如果你需要在容器运行时运行一些东西,你需要把它放在你的'ENTRYPOINT'或者'CMD'(或者组合)中。如果这是编排和开始多件事情,那么你可能需要一个入口点脚本。这一切听起来有点乱。为什么你需要在容器中运行多个东西? – johnharris85

回答

1

那么,它应该是入口点无法运行。入口点在容器启动时被调用,并且它是我需要的。 RUN在构建时执行,但它只影响文件系统。 Docker镜像不包含应用程序的执行状态,因此当创建镜像时,它没有关于已经启动的应用程序的信息。为了启动应用程序,他们必须设置为入口点