6

Docker image is built but when I want to run it, it shows this error:

Error: Unable to access jarfile rest-service-1.0.jar

My OS is Ubuntu 18.04.1 LTS and I use docker build -t doc-service & docker run doc-service.

This is my Dockerfile:

FROM ubuntu:16.04

MAINTAINER Frederico Apostolo <frederico.apostolo@blockfactory.com> (@fapostolo)

RUN apt-get update && apt-get -y upgrade

RUN apt-get install -y software-properties-common python-software-properties language-pack-en-base

RUN add-apt-repository ppa:webupd8team/java

RUN apt-get update && apt-get update --fix-missing && apt-get -y --allow-downgrades --allow-remove-essential --allow-change-held-packages upgrade \
    && echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections \
    && apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages curl vim unzip wget oracle-java8-installer \
    && apt-get clean && rm -rf /var/cache/* /var/lib/apt/lists/*

ENV JAVA_HOME /usr/lib/jvm/java-8-oracle/

run java -version
run echo $JAVA_HOME

#use locate for debug
RUN apt-get update && apt-get install -y locate mlocate && updatedb

#LIBREOFFICE START
RUN apt-get update && apt-get update --fix-missing && apt-get install -y -q libreoffice \
    libreoffice-writer ure libreoffice-java-common libreoffice-core libreoffice-common \
    fonts-opensymbol hyphen-fr hyphen-de hyphen-en-us hyphen-it hyphen-ru fonts-dejavu \
    fonts-dejavu-core fonts-dejavu-extra fonts-noto fonts-dustin fonts-f500 fonts-fanwood \
    fonts-freefont-ttf fonts-liberation fonts-lmodern fonts-lyx fonts-sil-gentium \
    fonts-texgyre fonts-tlwg-purisa
#LIBREOFFICE END

#font configuration
COPY 00-odt-template-renderer-fontconfig.conf /etc/fonts/conf.d

RUN mkdir /document-service /document-service/fonts /document-service/module /document-service/logs

# local settings
RUN echo "127.0.0.1       http://www.arbs.local http://arbs.local www.arbs.local arbs.local" >> /etc/hosts
# && mkdir /logs/ && echo "dummy" >> /logs/errors.log

#EXPOSE 2115

COPY document-service-java_with_user_arg.sh /
RUN chmod +x /document-service-java_with_user_arg.sh

RUN apt-get update && apt-get -y --no-install-recommends install \
    ca-certificates \
    curl

RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4
RUN curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecture)" \
    && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecture).asc" \
    && gpg --verify /usr/local/bin/gosu.asc \
    && rm /usr/local/bin/gosu.asc \
    && chmod +x /usr/local/bin/gosu

ENV LANG="en_US.UTF-8"

# In case someone loses the Dockerfile
# Needs to be in the end so it doesn't invalidate unaltered cache whenever the file is updated.
RUN rm -rf /etc/Dockerfile
ADD Dockerfile /etc/Dockerfile

ENTRYPOINT ["/document-service-java_with_user_arg.sh"]

this is document-service-java_with_user_arg.sh:

#!/bin/bash

USER_ID=${LOCAL_USER_ID:-9001}
USER_NAME=${LOCAL_USER_NAME:-jetty}

echo "Starting user: $USER_NAME with UID : $USER_ID"
useradd --shell /bin/bash --home-dir /document-service/dockerhome --non-unique --uid $USER_ID $USER_NAME

cd /document-service

/usr/local/bin/gosu $USER_NAME "$@" java -jar rest-service-1.0.jar

Can anyone help me on this?

SiHa
  • 7,830
  • 13
  • 34
  • 43
Mei-Chih Chang
  • 65
  • 1
  • 1
  • 4
  • 1
    Looks like rest-service-1.0.jar is missing. Add it to your container, package, and class path. – duffymo Jan 08 '19 at 10:37
  • for debug, you can run `pwd` and `ll` / `dir` to check- location, where command runs (`/usr/local/bin/gosu $USER_NAME "$@" java -jar rest-service-1.0.jar` ), and content of the given folder, then you will at least know if the file is missing or inaccessible , and `pwd` will give you location, where its trying to find given file – xxxvodnikxxx Jan 08 '19 at 10:39
  • rest-service-1.0.jar is placed in the same folder of dockerfile. How can I add it to my container, package, and class path? – Mei-Chih Chang Jan 08 '19 at 10:42

2 Answers2

0

Based on the comments, you must add the JAR when building the image by defining in your Dockerfile :

COPY rest-service-1.0.jar /document-service/rest-service-1.0.jar

You could also just use :

COPY rest-service-1.0.jar /rest-service-1.0.jar

, and remove cd /document-service in your entrypoint script, as on ubuntu:16.04 images, default working directory is /. My opinion is that setting the working directory in the script is safer, so you should just go for the first solution.

Note that you could also use ADD instead of COPY (as you already did in your Dockerfile), but here only COPY is necessary (read this post if you want more info : What is the difference between the `COPY` and `ADD` commands in a Dockerfile?).

Finally, I suggest you to add the COPY line at the end of your Dockerfile, so that if a new JAR is built, image won't be rebuilt from scratch but from an existing layer, speeding up build time.

norbjd
  • 10,166
  • 4
  • 45
  • 80
0

it looking error about workdir you must select workdir for this copy format try WORKDIR /yourpath/

Servet TAS
  • 63
  • 8