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

Java 无法在docker容器中加载libjli.so,java,docker,centos,docker-compose,flyway,Java,Docker,Centos,Docker Compose,Flyway,我有一个基于docker容器的ruby应用程序。其中之一是一条飞行路线,由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 我的环

我有一个基于docker容器的ruby应用程序。其中之一是一条飞行路线,由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
我的环境:

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"]
  • 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的路径。因此:

➜  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 libs,所以如果你使用自动生成的
.gitignore
文件,你需要检查*。因此文件没有从flyway目录中排除


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

像往常一样,答案比你想象的要简单-flyway总是使用自己的java库,所以如果你使用自动生成的
.gitignore
文件,你需要检查是否*。因此文件不会从flyway目录中排除


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

您是否尝试更改映像库?。我读了一些关于这个问题的报道,但是他们只提到了基于阿尔卑斯德语的图片。@我没有使用阿尔卑斯语,我已经尝试了版本7、8和9-所有的东西。我在github上看到了同样的讨论,但不幸的是,这没有什么帮助。最令人困惑的是,在我的macbook上,它完全是从同一个源构建的。您是否尝试手动定义LD_LIBRARY_PATH?这样做是不切实际的,因为他们说这样做有效。@German,会检查的,LD_LIBRARY_路径是在我的macLD_LIBRARY_路径上定义的。执行任何操作:/是否尝试更改图像库?。我读了一些关于这个问题的报道,但是他们只提到了基于阿尔卑斯德语的图片。@我没有使用阿尔卑斯语,我已经尝试了版本7、8和9-所有的东西。我在github上看到了同样的讨论,但不幸的是,这没有什么帮助。最令人困惑的是,在我的macbook上,它完全是从同一个源构建的。您是否尝试手动定义LD_LIBRARY_PATH?这样做是不切实际的,因为他们说这样做有效。@German,会检查的,LD_LIBRARY_路径是在我的macLD_LIBRARY_路径上定义的做任何事情:/