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

我有一个基于docker集装箱的ruby应用程序。 其中之一是从openjdk:8build造的Flyway。 本地(osx sierra)全部完美运作。 但是当我试图在我的服务器上构build并启动它时,它会失败:

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,构buildc6d412e
  • docker构成版本1.13.0,构build1719ceb

浮桥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使用的javavariables:

 ➜ 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的path:

 ➜ 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文件是否不从flyway目录中排除。

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