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

时间:2017-06-15 11:06:31

标签: 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,build c6d412e
  • docker-compose版本1.13.0,build 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)

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

1 个答案:

答案 0 :(得分:0)

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

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