gpt4 book ai didi

java - docker容器不会在后台启动Java

转载 作者:行者123 更新时间:2023-11-30 02:44:44 31 4
gpt4 key购买 nike

docker 必须在构建阶段启动 java/undertow 应用程序,并且它应该在运行阶段可用。但是,在启动 java 进程后,与启动 java 服务器相关的容器更改不会保留。

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

我的 docker 文件中的最后一个命令是

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

当我运行此容器时,我可以看到 server.log 文件中存在输出,确认服务器已成功启动

StartServices        - Services Started 

但是当我运行容器时没有服务在运行。我可以手动启动它,但这不是我想要的方式。我希望当容器启动时我的服务器也启动。

通知

& sleep 5

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

然而,即使“sleep 5”让我的应用程序启动,docker 仍然忽略图像中的更改并且不应用它们。

因此,当我执行“docker run”时,我的应用程序没有运行。

这是 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

最佳答案

嗯,它应该是 ENTRYPOINT 而不是 RUN。容器启动时会调用入口点,这正是我所需要的。RUN 在构建时执行,但它只影响文件系统。 Docker镜像不包含应用程序的执行状态,因此当创建镜像时,它不包含有关已启动的应用程序的信息。为了启动应用程序,必须将它们设置为 ENTRYPOINT

关于java - docker容器不会在后台启动Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533578/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com