私はドッカー・コンテナーに基づいてルビー・アプリケーションを持っています。それらの1つは、openjdkからビルドしたフライウェイです: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-CE、構築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)
は、多分それはフライウェイの問題ですか?しかし、それは完全に同一の容器で異なるのはなぜですか?
イメージベースを変更しようとしましたか?私はこの問題について読んでいましたが、それについてのいくつかの報告がありましたが、彼らはアルパインに基づいた画像だけを述べています。 – German
@German私はアルパインを使用していないので、私はバージョン7,8,9を試しました - すべて同じもの。私はgithubについて同じ議論を見ましたが、残念ながら役立たないです。主な混乱の瞬間は、私のマックブックでは同じソースから完全に構築されていることです –
LD_LIBRARY_PATHを手動で定義しようとしましたか? これを行うことは実用的ではありません。 – German