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
如果没有正在等待的进程,Docker将始终停止容器。你应该'尾巴-f server.log' –
我们正在谈论建设形象。在这个阶段没有人对服务器日志感兴趣。如果我做了tail -f server.log,那么构建过程将永远不会结束。 Java过程应作为图像设置的一部分在后台运行。 –
如果你需要在容器运行时运行一些东西,你需要把它放在你的'ENTRYPOINT'或者'CMD'(或者组合)中。如果这是编排和开始多件事情,那么你可能需要一个入口点脚本。这一切听起来有点乱。为什么你需要在容器中运行多个东西? – johnharris85