Parthi
Parthi

Reputation: 69

Dockerized spring-boot web service throws FileNotFound Exception

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)

Upvotes: 2

Views: 1795

Answers (3)

Parthi
Parthi

Reputation: 69

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>    

Upvotes: 1

Andreas Wederbrand
Andreas Wederbrand

Reputation: 39981

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?

Upvotes: 0

gokareless
gokareless

Reputation: 1253

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");

Upvotes: 1

Related Questions