java - 无法在 docker 容器中加载 libjli.so

标签 java docker centos docker-compose flyway

我有一个基于 docker 容器的 ruby​​ 应用程序。其中之一是 Flyway,从 openjdk:8 构建。在本地(osx sierra)一切正常。但是当我试图在我的服务器上构建和启动它时,它失败了:

flyway_1    | /flyway/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

我的环境:

  • CentOS Linux 7.3.1611 版(核心版)
  • Docker 版本 17.03.1-ce,构建 c6d412e
  • docker-compose 版本 1.13.0,构建 1719ceb

Flyway dockerfile:

FROM openjdk:8

RUN apt-get update && apt-get install -f -y postgresql-client

COPY ./vendor/flyway/ /flyway
COPY ./db/migrate.sh /flyway
RUN ln -s /flyway/flyway /usr/local/bin/flyway

WORKDIR /flyway
CMD ["bash", "migrate.sh"]

我有点卡住了 - 可以做些什么来解决这个问题?

UPD 1.

出于某种原因,我的本地 flyway 容器已正确定义 flyway 使用的 java 变量:

➜  docker-compose run --no-deps flyway /bin/bash
root@53574d9805a7:/flyway# ldd ./jre/bin/java 
    linux-vdso.so.1 (0x00007fff9bcd2000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa9720da000)
    libjli.so => /flyway/./jre/bin/../lib/amd64/jli/libjli.so (0x00007fa971ec4000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa971cc0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa971922000)
    /lib64/ld-linux-x86-64.so.2 (0x0000563539cb3000)

并且部署到服务器的相同容器没有 libjli.so 的路径:

➜  sudo docker-compose run --no-deps flyway /bin/bash
root@32d0575719ce:/flyway# ldd ./jre/bin/java 
    linux-vdso.so.1 (0x00007ffe24d53000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbb35053000)
    libjli.so => not found
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbb34e4f000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbb34ab1000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fbb35277000)

也许是飞路问题?但为什么它在完全相同的容器中有所不同?

最佳答案

和往常一样,答案比你想象的要简单——flyway 总是使用它自己的 java 库,所以如果你使用自动生成的 .gitignore 文件,你需要检查 *.so 文件是否是不排除在飞路目录之外。

我修复了 .gitignore,推送了一个新的提交并在服务器上使用它,现在它工作正常。

关于java - 无法在 docker 容器中加载 libjli.so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44565934/

相关文章:

jenkins - 我在 CentOS7 上的 Jenkins 无法访问...为什么?

java.io.NotSerializedException - ContactList 程序

java - 从java类导入值到jsp

logging - 日志级别作为 Docker GELF 日志记录驱动程序的字段

docker - 为什么在docker run上将入口点设为echo时未设置env变量?

linux - 在 CentOS 上安装 Apache

java - 如何扫描SQL文件在数据库中创建表?

java - MOXy Dynamix JAXB 上下文解码到错误的属性名称

docker --cache-from 与 BUILDKIT_INLINE_CACHE 不是每两次都工作

c - 银行,4台atm机输入txt文件,用信号量在它们之间同步信息