使用Dockerfile将Excel(.xls)文件复制到容器

时间:2019-05-21 07:29:34

标签: java docker gradle dockerfile

我刚接触Docker,因此我的问题可能有一个简单的答案。通过使用一些在线教程创建的Dockerfile,我成功地将Java项目集成到了容器中。现在,我想对.xls文件执行相同操作。我已经在所有现有线程中寻找解决方案,但找不到任何解决方案。

一个类使用.xls文件为我的应用程序服务生成信息。 Eveything很好用(这是一个Spring应用,邮递员和h2 db提供了很好的测试) 在这种情况下,我的Dockerfile看起来像下面的代码主干。 我只提供了两只“豚鼠”。 我尝试通过其类型访问excel文件的一种(jar文件似乎以这种方式访问​​)。 我也尝试使用文件名进行复制,因为这看起来更自然。 (尽管Jar文件似乎没有单独引起任何问题。)

FROM openjdk:8-jre

ARG JAR_FILE

COPY ${JAR_FILE} app.jar

COPY ${XLS_FILE}  test.xls

ENTRYPOINT ["java","-jar", "-Dserver.port=80" , "-Dprofile=prod", "/app.jar"]

FROM openjdk:8-jre

ARG JAR_FILE

COPY ${JAR_FILE} app.jar

COPY ${TaIlagerplatz_KR}  test.xls

ENTRYPOINT ["java","-jar", "-Dserver.port=80" , "-Dprofile=prod", "/app.jar"]

我有更多不确定的探索/实验。我有点编程极限。.:) 我发现第一次尝试会收到“无效或损坏的jar”错误。 该消息显示为

C:\Users\dnorthe\Java Tutorial\RGLVS_BE_Core>docker run test3
Error: Invalid or corrupt jarfile /app.jar

第二条更复杂的错误消息显示为:

java.io.FileNotFoundException: build/Data/TaIlagerplatz_KR.xls (No such file or directory)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:93)
        at de.biere.rglvs.artikelstamm.init.SeedDataArtikelExcel.read(SeedDataArtikelExcel.java:39)
        at de.biere.rglvs.artikelstamm.init.SeedDataArtikelExcel.<clinit>(SeedDataArtikelExcel.java:30)
        at de.biere.rglvs.artikelstamm.init.DataLoaderArtikel.run(DataLoaderArtikel.java:27)
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:804)
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:794)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
        at de.biere.rglvs.RglvsApplication.main(RglvsApplication.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
java.io.FileNotFoundException: build/Data/TaIlagerplatz_KR.xls (No such file or directory)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:93)
        at de.biere.rglvs.lager.init.SeedDataLoaderLagerplatzExcel.read(SeedDataLoaderLagerplatzExcel.java:36)
        at de.biere.rglvs.lager.init.SeedDataLoaderLagerplatzExcel.<clinit>(SeedDataLoaderLagerplatzExcel.java:27)
        at de.biere.rglvs.lager.init.DataLoaderLagerplatz.run(DataLoaderLagerplatz.java:27)
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:804)
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:794)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
        at de.biere.rglvs.RglvsApplication.main(RglvsApplication.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

伴随其他一些弹簧注入问题。如果需要的话,我可以发布整个错误消息(它跨越几页)。我也不确定我是否在该网站上正确发布了代码-提前对不起!..

1 个答案:

答案 0 :(得分:-1)

道歉而无需解释。

当前,您的Dockerfiles将创建目录“ app.jar”并在其中复制app.jar。与此同时,入口点将查找/app.jar,而是通过app.jar名称查找目录,从而抛出损坏的目录。 jar错误。

解决方法是将app.jar直接复制到/

这应该有效。

FROM openjdk:8-jre

ARG JAR_FILE

ARG XLS_FILE

COPY ${JAR_FILE} ${XLS_FILE} /

ENTRYPOINT ["java","-jar", "-Dserver.port=80" , "-Dprofile=prod", "/app.jar"]