错误: JAVA_HOME设置为无效目录:/usr/lib/jvm/java-8-openjdk-amd64
错误: 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"]
这个问题的原因是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的实际副本的链接。
这个方法似乎比其他建议更接近解决问题。感谢所有尝试解答的人。我还在继续研究,但很快会提供更多信息和任何后续问题的链接。谢谢!
错误: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作为基础镜像无关。解决此问题后,可以考虑选择更合适的基础镜像。