首页 > 解决方案 > GraphDB Docker 容器运行失败:adoptopenjdk/openjdk12:alpine

问题描述

使用此处提供的标准 DockerFile 时,GraphDB 无法以以下输出启动:

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

adoptopenjdk/openjdk11:alpine调查一下,最近更新到 Alpine 3.14的 DockerFile 使用。

如果我切换到较旧的 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

标签: graphdb

解决方案


该问题来自基础映像中的更新。从几周开始,采用切换到 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 ] 返回 false,尽管 java 存在并且是可执行的。

您现在可以通过以下方式解决此问题

  1. 拉取 GraphDB 发行版
  2. 解压
  3. 在 bin 文件夹中打开“setvars.in.sh”
  4. 查找并删除第 32 行附近的 if 块

如果 [ !-x "$JAVA" ]; 然后回显“找不到任何可执行的 java 二进制文件。请在您的 PATH 中安装 java 或设置 JAVA_HOME”exit 1 fi

  1. 再次压缩它并在 Dockerfile 中提供它,而无需从 maven.ontotext.com 中提取它

将其传递给 Dockerfile 是通过“添加”完成的。您可以查看 GraphDB 免费版本的 Dockerfile,以获取有关如何将 zip 文件传递​​给 Dockerfile 的参考https://github.com/Ontotext-AD/graphdb-docker/blob/主/免费版/Dockerfile


推荐阅读