1

I write the docker file for run the jar file and it does not create the log file for see the console below is my docker file

From ubuntu 
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y  software-properties-common && \
    add-apt-repository ppa:webupd8team/java -y && \
    apt-get update && \
    echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
    apt-get install -y oracle-java8-installer && \
    apt-get clean
VOLUME /temp
RUN apt-get install -y vim
ADD real_estate_false.jar /real_estate_false.jar
COPY real_estate_false_lib /real_estate_false_lib
COPY resources /resources
COPY testxml /testxml
CMD ["java","-jar","/real_estate_false.jar",">","var/log/jar.log"]
1
  • Typo? "var/log/.." should it be "/var/log/.."? Commented Aug 31, 2016 at 22:36

3 Answers 3

1

To just run myapp.jar in docker (e.g. to avoid installing java on the host) you can just run:

docker run -v `pwd`:/mnt java:8 java -jar /mnt/myapp.jar
Sign up to request clarification or add additional context in comments.

1 Comment

I like this example because for me it is the first one which clearly shows how to run an existing jar within a javarized docker container. Thanx!
0

The exec form of CMD doesn't know what redirection is, that's a shell feature.

Either use stdout for logging.

CMD ["java","-jar","/real_estate_false.jar"]

If you really need a log file in the container, run the command in a shell

CMD ["sh", "-c", "java -jar /real_estate_false.jar > var/log/jar.log"]
CMD java -jar /real_estate_false.jar > var/log/jar.log

Comments

0

Why are you creating a logging file inside the container? Configuring a logging driver would be more flexible.

The following example is contrived, but demonstrates how logging events from all your containers could be collected. I suggest reading further into the options available from fluentd

Example

First run fluentd within a container to collect log events

mkdir log
docker run -d --name fluentd -p 24224:24224 -v $PWD:/fluentd/etc -v $PWD/log:/fluentd/log -e FLUENTD_CONF=log.conf fluent/fluentd

Now run a container that creates an event to be logged:

docker run --log-driver=fluentd ubuntu echo hello world

The sample configuration sends log events to an output log file

├── log
│   └── events.20160901.b53b670f22298bbcb
└── log.conf

log.conf

<source>
  @type  forward
  port  24224
</source>

<match **>
   @type file
   path         /fluentd/log/events
   append       true
</match>

Additional

Are you married to the Oracle JDK? The following Dockerfile would be considerable simpler:

FROM openjdk:8
ADD target/demo-1.0.jar /opt/demo/demo-1.0.jar
CMD ["java","-jar","/opt/demo/demo-1.0.jar"]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.