错误: JAVA_HOME设置为无效目录:/usr/lib/jvm/java-8-openjdk-amd64

8 浏览
0 Comments

错误: JAVA_HOME设置为无效目录:/usr/lib/jvm/java-8-openjdk-amd64

我对Docker还比较新,正苦于Dockerfile中无法找到JAVA_HOME。我遇到了一个标题错误,其中包括请在环境中设置JAVA_HOME变量,以匹配您的Java安装位置。executor failed running [/bin/sh -c /opt/Android/cmdline-tools/latest/bin/sdkmanager --update]: exit code: 1 当运行RUN /opt/Android/cmdline-tools/latest/bin/sdkmanager --update时。

我感觉有点束手无策,但我认为问题在于不知道JDK安装在哪里,或者不知道如何从Dockerfile中找到它;我尝试使用echoJAVA_HOME,以便在构建镜像时查看它,但是还是没有运气。非常感谢您对此的帮助。我一直在通过谷歌搜索和尝试解决这个问题。谢谢。

FROM node:12.12.0
ARG CMDLINE_TOOLS_VERSION=7583922
ARG ANDROID_BUILD_TOOLS=30.0.3
RUN apt-get -qqy update \
    && apt-get -qqy install \
    python-dev \
    --no-install-recommends
RUN apt-get install -y software-properties-common gcc
RUN apt-get update && apt-get install -y  python3-pip
RUN pip3 install awscli
RUN apt-get install -y jq
RUN mkdir -p /usr/share/man/man1 /usr/share/man/man2
RUN apt-get update && apt-get install -y --no-install-recommends openjdk-8-jdk && apt-get clean;
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ENV PATH=$PATH:$JAVA_HOME/bin
RUN wget -q https://services.gradle.org/distributions/gradle-4.5.1-bin.zip && unzip gradle-4.5.1-bin.zip -d /opt && rm gradle-4.5.1-bin.zip
ENV GRADLE_HOME=/opt/gradle-4.5.1
ENV PATH=$PATH:/opt/gradle-4.5.1/bin
RUN wget https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip
RUN mkdir -p /opt/Android/cmdline-tools
RUN  unzip commandlinetools-linux-7583922_latest.zip -d /opt/Android/cmdline-tools
RUN mv /opt/Android/cmdline-tools/cmdline-tools /opt/Android/cmdline-tools/latest
ENV ANDROID_HOME=/opt/Android
ENV PATH="$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin \
:$ANDROID_HOME/cmdline-tools/latest:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH"
RUN /opt/Android/cmdline-tools/latest/bin/sdkmanager --update
RUN /opt/Android/cmdline-tools/latest/bin/sdkmanager --list
RUN /opt/Android/cmdline-tools/latest/bin/sdkmanager --list | grep build-tools
RUN echo y | /opt/Android/cmdline-tools/latest/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" "platform-tools" "platforms;android-30" "tools" >/dev/null
RUN yes | /opt/Android/cmdline-tools/latest/bin/sdkmanager --licenses
CMD ["yarn", "start"]

0
0 Comments

这个问题的原因是Java安装路径设置错误,解决方法是检查Java安装路径是否正确。

文章如下:

当我运行`RUN ls -lart /usr/lib/jvm/java-8-openjdk-amd64`命令时,我得到了`cannot access '/usr/lib/jvm/java-8-openjdk-amd64': No such file or directory`的错误提示。这意味着目录不存在。

要么是路径写错了,要么是Dockerfile中的某些内容(可能是换行符)导致了错误。为了排除换行符的问题,可以尝试使用相同的命令,但是调换参数的位置,即:

RUN ls /usr/lib/jvm/java-8-openjdk-amd64 -lart

如果现在它抱怨无法识别的选项,那么很可能是换行符的问题(现在影响到了`t`选项而不是目录路径)。

然而,如果它仍然显示`No such file or directory`,那么你应该检查你的Java安装路径。

为了排除非打印字符的影响,你可以提供Dockerfile的实际副本的链接。

这个方法似乎比其他建议更接近解决问题。感谢所有尝试解答的人。我还在继续研究,但很快会提供更多信息和任何后续问题的链接。谢谢!

0
0 Comments

原因:JAVA_HOME被设置为无效的目录。

解决方法:更换基础镜像为openjdk:11-jdk,并安装Python3和AWS CLI。如果要继续使用当前的基础镜像,则可以通过运行命令"RUN which java"来查看Java的实际安装位置。然而,由于符号链接,通常不会很有帮助,所以更好的方法是运行命令"readlink -f "$(which java)""。

0
0 Comments

错误:JAVA_HOME设置为无效目录:/usr/lib/jvm/java-8-openjdk-amd64

问题原因:Dockerfile中行终止字符的问题。

解决方法:请确保保存Dockerfile时使用适合Unix机器的行终止字符。可以使用以下方法在Windows上使用Powershell将Windows行终止字符替换为Unix行终止字符。

(Get-Content Dockerfile -Raw) -replace "`r`n", "`n" | Set-Content Dockerfile

此外,可以使用以下命令动态设置JAVA_HOME:

RUN export JAVA_HOME=$(readlink -f $(which java) | sed "s:/bin/java::")

此命令将自动获取Java的安装目录,并将其设置为JAVA_HOME。请注意,此命令需要在使用Java之前运行。

以上方法经过测试可行。如果问题仍然存在,可能是Dockerfile中其他行的行终止字符也存在问题。请将所有行终止字符更改为适合Unix机器的格式。

注意:此问题与Dockerfile的基础镜像选择无关,也与使用NodeJS作为基础镜像无关。解决此问题后,可以考虑选择更合适的基础镜像。

0