【问题标题】:Java8 base image has java7 installed dockerJava 8 基础镜像已经安装了 docker
【发布时间】:2016-05-29 11:18:23
【问题描述】:

我已尝试使用提供的 java8 基础映像创建自定义 docker 映像,如 here 所述。

以下是我做过的尝试

  • FROM java
  • FROM java:latest
  • FROM java:8
  • FROM java:8-jdk

创建映像时,我检查了安装的 Java 版本 (java -version),所有这些都返回

java version "1.7.0_101"
OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)

这会导致问题,因为我的应用程序被编译为使用 Java 1.8。在容器上实际获取 java8 应该使用什么 java 映像?

【问题讨论】:

    标签: java docker dockerfile


    【解决方案1】:

    那些应该工作,并为我工作。您确定要构建它并运行新映像吗?

    $ echo "FROM java:latest" > Dockerfile
    $ docker build -t test .
    ...
    $ docker run --rm test java -version
    openjdk version "1.8.0_91"
    OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-1~bpo8+1-b14)
    OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
    

    您可以使用docker inspect 查看有关本地图像的信息。如果您检查其中一个 Java 映像,您应该查看环境变量中的 Java 版本:

    $ docker inspect java:latest
    ...
                "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64",
                "JAVA_VERSION=8u91",
                "JAVA_DEBIAN_VERSION=8u91-b14-1~bpo8+1",
    ...
    

    如果您使用docker inspect 查看您的图像,您也应该会看到这些环境变量,并且还可以将使用的层与 Java 图像进行比较以尝试查看发生了什么。

    【讨论】:

      【解决方案2】:

      您列出的所有映像都应运行 java 8。请确保您正在构建映像并在更新 Dockerfile 后在新容器中运行它。

      echo "FROM java:8" > Dockerfile
      docker build -t my-java:latest .
      docker run --rm my-java:latest java -version
      

      【讨论】: