GraphDB Docker 容器无法 运行: adoptopenjdk/openjdk12:alpine

GraphDB Docker Container Fails to Run: adoptopenjdk/openjdk12:alpine

使用标准 Docker可用文件 here 时,GraphDB 无法启动,输出如下:

Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME

查看它,Docker文件使用最近更新到 Alpine 3.14 的 adoptopenjdk/openjdk11:alpine

如果我切换到较旧的 Docker 映像(或使用 adoptopenjdk/openjdk12:alpine),则 GraphDB 可以正常启动。

如何在使用最新版本 adoptopenjdk/openjdk11:alpine 的情况下解决此问题?

下面是 Docker文件:

FROM adoptopenjdk/openjdk11:alpine

# Build time arguments
ARG version=9.1.1
ARG edition=ee

ENV GRAPHDB_PARENT_DIR=/opt/graphdb
ENV GRAPHDB_HOME=${GRAPHDB_PARENT_DIR}/home

ENV GRAPHDB_INSTALL_DIR=${GRAPHDB_PARENT_DIR}/dist

WORKDIR /tmp

RUN apk add --no-cache bash curl util-linux procps net-tools busybox-extras wget less && \
    curl -fsSL "http://maven.ontotext.com/content/groups/all-onto/com/ontotext/graphdb/graphdb-${edition}/${version}/graphdb-${edition}-${version}-dist.zip" > \
    graphdb-${edition}-${version}.zip && \
    bash -c 'md5sum -c - <<<"$(curl -fsSL http://maven.ontotext.com/content/groups/all-onto/com/ontotext/graphdb/graphdb-${edition}/${version}/graphdb-${edition}-${version}-dist.zip.md5)  graphdb-${edition}-${version}.zip"' && \
    mkdir -p ${GRAPHDB_PARENT_DIR} && \
    cd ${GRAPHDB_PARENT_DIR} && \
    unzip /tmp/graphdb-${edition}-${version}.zip && \
    rm /tmp/graphdb-${edition}-${version}.zip && \
    mv graphdb-${edition}-${version} dist && \
    mkdir -p ${GRAPHDB_HOME}

ENV PATH=${GRAPHDB_INSTALL_DIR}/bin:$PATH

CMD ["-Dgraphdb.home=/opt/graphdb/home"]

ENTRYPOINT ["/opt/graphdb/dist/bin/graphdb"]

EXPOSE 7200

问题来自基础映像的更新。几周后采用切换到 alpine 3.14,它与旧容器运行时 (runc) 存在一些问题。该问题可以在发行说明中看到:https://wiki.alpinelinux.org/wiki/Release_Notes_for_Alpine_3.14.0

更新您的 Docker 将解决此问题。但是,如果您不想更新 Docker,有一个解决方法。

一些附加信息: 问题的原因是由于某种原因,旧 docker 版本和 alpine 3.14 中的容器 运行 似乎与测试标志“-x”有关,因此 if [-x /opt/java/openjdk/bin/java ] returns false,尽管 java 存在并且可执行。

您现在可以通过

解决此问题
  1. 拉取 GraphDB 分布
  2. 解压缩
  3. 打开 bin 文件夹中的“setvars.in.sh”
  4. 找到并删除第 32 行周围的 if 块

if [ ! -x "$JAVA" ]; then echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME" exit 1 fi

  1. 再次压缩并在 Docker 文件中提供,而不是从 maven.ontotext.com
  2. 中提取

通过 'ADD' 将其传递到 Docker 文件 您可以查看 GraphDB 免费版的 Docker 文件以获取有关如何将 zip 文件传递​​到 Docker 文件的参考 https://github.com/Ontotext-AD/graphdb-docker/blob/master/free-edition/Dockerfile