Java 如何在docker映像中保留导出的文件

Java 如何在docker映像中保留导出的文件,java,docker,maven,dockerfile,Java,Docker,Maven,Dockerfile,我正在docker中迁移一个java独立maven项目。到目前为止,我们为这个maven项目创建了一个jar文件,它使用公共静态void main方法运行 java -cp app.jar com.xxx.ExportManager db.properties 完成此代码后,它将在其当前目录中导出一个文件 Dockerfile FROM centos:7 RUN yum install -y \ java-1.8.0-openjdk \ java-1.8.0-openjdk-de

我正在docker中迁移一个java独立maven项目。到目前为止,我们为这个maven项目创建了一个jar文件,它使用公共静态void main方法运行

java -cp app.jar com.xxx.ExportManager db.properties
完成此代码后,它将在其当前目录中导出一个文件

Dockerfile

FROM centos:7

RUN yum install -y \
   java-1.8.0-openjdk \
   java-1.8.0-openjdk-devel

ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk/

ENV echo $JAVA_HOME

RUN  java -version

ARG JAR_FILE=target/manager.jar
ARG JAR_LIB_FILE=target/lib/

WORKDIR /opt/manager/app/

COPY ${JAR_FILE} app.jar

COPY conf/db.properties /opt/manager/app/db.properties

ADD ${JAR_LIB_FILE} lib/

ENTRYPOINT ["java","-jar","app.jar"]
命令:

  • 建筑形象:
    docker build-t pc.
  • 运行主方法:
    docker Run-t pc/opt/manager/app/db.properties
运行后,它会将图像内部的文件导出到/opt/manager/app/(我确信,因为我已经通过记录器检查了它)。但是当我使用命令看到图像的内容时

docker run -it --entrypoint sh pc 
cd /opt/manager/app
该目录没有导出文件,但它包含所有其他项目文件

如何在图像中保留导出的文件

PS:我是docker的新手,请原谅任何错误。

docker run-it--entrypoint sh pc实际上启动了一个新容器,而不是在运行的容器中启动外壳。因此,您正在查看尚未完成导出的新容器(因为您重写了入口点)

要在正在运行的容器中启动shell并将stdin/stdout连接到它,您需要
exec
而不是
run
,例如:

docker exec -it pc bash
然而,在您的特定场景中,您可能无论如何都无法启动shell,因为一旦导出完成,容器将停止。有关检查已停止容器的文件系统的信息,请参见本文