2

I have tried to copy files from my windows machine to Docker container using the Docker File Command and reading those files from spring web service . Webservice throws an error file not found!

Here I am trying to copy my local directory src/nlp to /data container directoty

below are the avaialble docker volume

enter image description here

Docker File

FROM openjdk:8-jdk-alpine

EXPOSE 8080

ARG JAR_FILE=/target/nlp-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} nlp-0.0.1-SNAPSHOT.jar

ADD src/nlp  /data

ENTRYPOINT ["java","-jar", "nlp-0.0.1-SNAPSHOT.jar"]`

application.properties

server.port=8080
logging.level.radial.nlp=DEBUG
logging.file = mylogfile.log
nlp.learning.dir = /data/

Java

InputStream inputStream = new FileInputStream(environment.getProperty("nlp.learning.dir")+ "/train/models/en/token/en-token.bin"); 

Error

java.io.FileNotFoundException: /data/train/models/en/token/en-token.bin (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)
Parthi
  • 69
  • 1
  • 2
  • 12

3 Answers3

1

Please notice extra slash in your path before train dir /data//train/models/en/token/en-token.bin

Consider changing reading line to:

InputStream inputStream = new FileInputStream(environment.getProperty("nlp.learning.dir")+ "train/models/en/token/en-token.bin");

gokareless
  • 1,165
  • 1
  • 10
  • 26
  • I have edited the error now, it was typo sorry for that.. can you check again now ? it is not related to extra slash i believe – Parthi Jul 04 '19 at 11:20
  • try adding `RUN ls /data/train/models/en/token` or `RUN cat /data/train/models/en/token/en-token.bin` to your Dockerfile after adding resources. What is the output when you build an image? – gokareless Jul 04 '19 at 11:39
  • It should contain filename/file content – gokareless Jul 04 '19 at 11:42
1

I have altered my maven plugin dependency , now it is working fine

<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.7</version>
<!-- Wire up to the default build phases -->
<executions>
  <execution>
    <id>default</id>
    <goals>
      <goal>build</goal>
      <goal>push</goal>
    </goals>
  </execution>
</executions>
<configuration>
  <repository>${project.artifactId}</repository>
  <buildArgs>
    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
  </buildArgs>
</configuration>    

Parthi
  • 69
  • 1
  • 2
  • 12
0

Most likely you don't have a file src/nlp/train/models/en/token/en-token.bin the same directory as you are building your container from.

parent/
├── Dockerfile
└── src/
    └── nlp/
        └── train/
            └── models/
                └── en/
                    └── token/
                        └── en-token.bin <--- does this exist?
Andreas Wederbrand
  • 38,065
  • 11
  • 68
  • 78