我正在 docker 容器中安装一个 java 应用程序。它运行良好,但我在日志中不断出现这个错误:
INFO 1 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib]
因此,我尝试按照 this 安装此 APR 包和 this ,并通过在我的 dockerfile 中添加这一行来安装 tomcat native:
RUN apt-get install -y libtcnative-1
但是,当添加此行时,我在日志中收到以下消息:
ERROR 1 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.33] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
我尝试安装:
apt-get install -y openjdk-8-jdk libapr1-dev
和
apt-get install -y openjdk-8-jdk libtcnative-1 libapr1-dev
但是这些都不起作用..我不断收到相同的消息。
我还尝试按照第一个答案 here 从源安装,但这也不起作用。
这是我的 dockerfile 的其余部分:
FROM ubuntu:16.04
RUN apt-get update \
&& apt-get install -y software-properties-common python-software-properties \
&& add-apt-repository ppa:mozillateam/ppa \
&& apt-get update \
&& apt-get install -y firefox firefox-esr
RUN apt-get install -y libtcnative-1 openjdk-8-jdk
任何帮助表示赞赏。谢谢!
最佳答案
如果有人仍然感兴趣,这就是我所做的:
FROM adoptopenjdk/openjdk11:jdk-11.0.1.13 AS build
ADD apr-1.7.0 $HOME/apr-1.7.0
ADD tcnative $HOME/tcnative
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && \
apt-get -y upgrade && \
apt-get install -y build-essential libssl-dev
WORKDIR $HOME/apr-1.7.0
RUN ./configure && make && make install
WORKDIR $HOME/tcnative
RUN ./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-java-home=$JAVA_HOME --with-ssl=$HOME/OPENSSL --prefix=/usr/local/apr
RUN make && make install
FROM adoptopenjdk/openjdk11:jre-11.0.10_9
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && \
apt-get -y upgrade && \
apt-get install -y --no-install-recommends libssl-dev x11-apps && \
apt-get clean && \
apt-get autoremove -y --purge && \
rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/local/apr /usr/local/apr
入口点 ["java","-Djava.library.path=/usr/local/apr/lib","-jar","app.jar"]
该应用程序现在启动并报告正确的库:
org.apache.catalina.core.AprLifecycleListener - Loaded Apache Tomcat Native library [1.2.31] using APR version [1.7.0].
关于java - 在生产环境中实现最佳性能的 APR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547931/