graphdb - 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
解决方案
该问题来自基础映像中的更新。从几周开始,采用切换到 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 存在并且是可执行的。
您现在可以通过以下方式解决此问题
- 拉取 GraphDB 发行版
- 解压
- 在 bin 文件夹中打开“setvars.in.sh”
- 查找并删除第 32 行附近的 if 块
如果 [ !-x "$JAVA" ]; 然后回显“找不到任何可执行的 java 二进制文件。请在您的 PATH 中安装 java 或设置 JAVA_HOME”exit 1 fi
- 再次压缩它并在 Dockerfile 中提供它,而无需从 maven.ontotext.com 中提取它
将其传递给 Dockerfile 是通过“添加”完成的。您可以查看 GraphDB 免费版本的 Dockerfile,以获取有关如何将 zip 文件传递给 Dockerfile 的参考https://github.com/Ontotext-AD/graphdb-docker/blob/主/免费版/Dockerfile
推荐阅读
- javascript - 如何扩展背景图像以填充整个页面?
- list - Coq:依赖列表上的类型不匹配,可以通过证明来解决
- javascript - chrome.storage.local 有时不工作
- swift - 在 iOS UITableViewController 中设置 AdMob 原生广告的宽度
- scala - # 使用 Spark 将数据帧写入 csv 文件时写入磁盘的分区数
- php - 用于订单确认电子邮件的 phpmailer 的安全性
- java - Java初学者,input.close(); 在做while循环之后,如何?
- multithreading - Flutter 计算和网络请求
- javascript - 无法读取未定义的属性“以前”
- authentication - 使用 IdentityServer4 对 API 进行自定义 JWT 身份验证