如何在docker container

时间:2016-08-31 08:42:32

标签: java docker jar executable-jar dockerfile

我编写了docker文件来运行jar文件而它没有创建日志文件,因为下面的控制台是我的docker文件

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"]

3 个答案:

答案 0 :(得分:1)

要在docker中运行myapp.jar(例如,为了避免在主机上安装java),您可以运行:

docker run -v `pwd`:/mnt java:8 java -jar /mnt/myapp.jar

答案 1 :(得分:0)

CMD exec 形式并不知道重定向是什么,这是一个shell功能。

使用stdout进行日志记录。

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

如果您确实需要容器中的日志文件,请在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

答案 2 :(得分:0)

为什么要在容器中创建日志文件?配置logging driver会更灵活。

以下示例是设计的,但演示了如何收集来自所有容器的日志记录事件。我建议您进一步阅读fluentd

提供的选项

实施例

首先运行流利的within a container来收集日志事件

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

现在运行一个容器,创建一个要记录的事件:

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

示例配置将日志事件发送到输出日志文件

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

log.conf

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

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

的其他

您是否已与Oracle JDK结婚?以下Dockerfile会相当简单:

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