在Dockerfile中编写Java时如何在容器中安装Java?

问题描述

我在软件开发方面很幼稚。我想使用cron作业从Dkron Scheduler运行jar文件。我在docker中运行dkron(使用docker-compose up)。我正在传递“命令”:“ java --version”以查看是否可以从Dkron运行Java。由于docker没有安装Java,我将dockerfile.hub文件更改为:

FROM alpine
LABEL maintainer="Victor Castell <victor@victorcastell.com>"

RUN set -x \
    && buildDeps='bash ca-certificates openssl tzdata' \ 
    && apk add --update $buildDeps \
    && apk add openjava8                                #add this line to install java
    && rm -rf /var/cache/apk/* \
    && mkdir -p /opt/local/dkron

ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk             #add this line to install java
ENV PATH $PATH:$JAVA_HOME/bin                           #add this line to install java

EXPOSE 8080 8946

ENV SHELL /bin/bash
workdir /opt/local/dkron

copY dkron .
copY dkron-* ./
ENTRYPOINT ["/opt/local/dkron/dkron"]

CMD ["--help"]

当我再次做docker-compose时,它没有给出任何错误,仍然通过json通过UI传递“命令”:“ java --version”,dkron显示错误-exec:“ java”:找不到可执行文件在$ PATH中。

我该怎么解决

谢谢。

解决方法

我能够使用dkron作为基础映像(可公开获得)在docker容器中创建JVM,并在其之上构建另一个映像。

这是我为运行Java应用程序而创建的dockerfile

FROM dkron/dkron
WORKDIR /root/hello-world
COPY hello.java /root/hello-world

RUN apk add openjdk8

ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $JAVA_HOME/bin:$PATH

RUN javac hello.java

然后我建立图像。设id为xxx 然后我运行映像并以以下方式构建dkron服务器 docker run -p 8080:8080 xxx代理--server --bootstrap-expect = 1 --node-name = node1

,

尝试此文件

FROM alpine
LABEL maintainer="Victor Castell <victor@victorcastell.com>"

RUN set -x \
        && buildDeps='bash ca-certificates openssl tzdata' \
        && apk add --update $buildDeps \
        && apk add openjdk8 \
        && rm -rf /var/cache/apk/* \
        && mkdir -p /opt/local/dkron

ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV PATH="$JAVA_HOME/bin:${PATH}"

EXPOSE 8080 8946

ENV SHELL /bin/bash
WORKDIR /opt/local/dkron

COPY dkron .
COPY dkron-* ./
ENTRYPOINT ["/opt/local/dkron/dkron"]

CMD ["--help"]

高山套餐没有openjava8套餐。

编辑:更新ENV变量