无法加载码头集装箱中的libjli.so
问题描述:
我有一个基于码头集装箱的红宝石应用程序。其中之一是从openjdk建设的Flyway:8。本地(osx sierra)完美运作。但是,当我试图建立并启动它在我的服务器上,它失败的:无法加载码头集装箱中的libjli.so
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的发布1611年3月7日(核心)
- 泊坞窗版本17.03.1策,建立c6d412e
- 泊坞窗,撰写版本1.13.0,构建1719ceb
迁飞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"]
我有点卡住 - 能够做些什么来解决这个问题?通过飞路用于Java的
UPD 1.
出于某种原因,我的本地飞行用的容器已经正确定义的变量:
➜ docker-compose run --no-deps flyway /bin/bash
[email protected]:/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
[email protected]:/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
,推送了一个新的提交并在服务器上使用它,现在它工作正常。
您是否尝试更改图片库?我正在阅读关于这个问题的文章,我发现了一些关于它的报道,但他们只提到了阿尔卑斯山的图像。 – German
@德国我没有使用阿尔派,我已经尝试过版本7,8和9 - 都是一样的东西。我在github上看到了同样的讨论,但不幸的是这并没有帮助。主要令人困惑的是,在我的macbook上,它完全从相同的源代码构建 –
您是否尝试手动定义LD_LIBRARY_PATH? 这样做是不切实际的,他们说这是行得通的。 – German