【问题标题】:How to run jar file using docker file in docker container如何使用 docker 容器中的 docker 文件运行 jar 文件
【发布时间】:2017-01-07 18:12:05
【问题描述】:

我编写了 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"]

【问题讨论】:

  • 错字? “var/log/..”应该是“/var/log/..”吗?

标签: java docker jar executable-jar dockerfile


【解决方案1】:

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

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

【讨论】:

  • 我喜欢这个例子,因为对我来说,这是第一个清楚地展示了如何在 javarized docker 容器中运行现有 jar 的例子。谢谢!
【解决方案2】:

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

要么使用标准输出进行日志记录。

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

【讨论】:

    【解决方案3】:

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

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

    示例

    首先运行fluentdwithin 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"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 2020-03-26
      • 2016-05-05
      • 2020-06-24
      • 2018-03-15
      • 1970-01-01
      • 2020-09-24
      相关资源
      最近更新 更多