这是我的 Dockerfile
FROM ubuntu:20.04
# Install java 8 with apt-get
RUN apt-get update -qq && apt-get install -yqq openjdk-8-jdk
# Install java 11 with sdkman
RUN apt-get install -yqq curl unzip zip
RUN curl -s "https://get.sdkman.io" | bash
RUN /bin/bash -c "source /root/.sdkman/bin/sdkman-init.sh; sdk install java 11.0.12-open"
# Print java version
RUN java -version
RUN java -version
说java 8
在交互模式 ( docker run --rm -it <image-id>
) 中,它显示java 11
RUN /bin/bash -c "source /root/.sdkman/bin/sdkman-init.sh; java -version"
在 Dockerfile 中使用会提供java 11
为什么 ?什么可以解释这些行为之间的差异?用 apt-get 安装 java 11 不会出现这个问题,默认的 java 版本无论如何都会变成 11。