【发布时间】:2022-11-03 02:58:07
【问题描述】:
我对 Docker 还很陌生,并且正在努力解决在 Dockerfile 中没有看到 JAVA_HOME 的问题。我得到了名义上的错误;其中包括Please set the JAVA_HOME variable in your environment to match the location of your Java installation. 和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 中找到它;我尝试回显JAVA_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"]
【问题讨论】:
-
你能在运行
RUN /opt/Android/cmdline-tools/latest/bin/sdkmanager --update之前运行RUN ls -lart /usr/lib/jvm/java-8-openjdk-amd64吗 -
环境路径=$PATH:$JAVA_HOME/bin我不喜欢那样。应该是
ENV PATH=$JAVA_HOME/bin:$PATH你可以通过运行sudo find / -type f -executable -name java找出每个java 在哪里来消除一些疑问 -
@harshavmb,当我运行它时,我得到
cannot access '/usr/lib/jvm/java-8-openjdk-amd64': No such file or directory,executor failed running [/bin/sh -c ls -lart /usr/lib/jvm/java-8-openjdk-amd64]: exit code: 2 -
我刚刚使用您的 Dockerfile 构建了一个 Docker 映像,它运行良好。你使用的是什么版本的 Docker?您可以尝试使用
docker build --no-cache .构建吗? -
“也许,只是在路径的尽头少了一个
/bin/”- 错误的!JAVA_HOME的末尾不应有/bin/或/bin。约定是它指向目录以上Java 安装的“bin”目录。 (如您所见,OP 这样做:ENV PATH=$PATH:$JAVA_HOME/bin...)
标签: java docker dockerfile