2017-06-15 1 views
1

私はドッカー・コンテナーに基づいてルビー・アプリケーションを持っています。それらの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) 

は、多分それはフライウェイの問題ですか?しかし、それは完全に同一の容器で異なるのはなぜですか?

+0

イメージベースを変更しようとしましたか?私はこの問題について読んでいましたが、それについてのいくつかの報告がありましたが、彼らはアルパインに基づいた画像だけを述べています。 – German

+0

@German私はアルパインを使用していないので、私はバージョン7,8,9を試しました - すべて同じもの。私はgithubについて同じ議論を見ましたが、残念ながら役立たないです。主な混乱の瞬間は、私のマックブックでは同じソースから完全に構築されていることです –

+1

LD_LIBRARY_PATHを手動で定義しようとしましたか? これを行うことは実用的ではありません。 – German

答えて

0

いつものように、flywayは常に独自のJavaライブラリを使用しているので、自動生成された.gitignoreファイルを使用する場合、* .soファイルがflywayディレクトリから除外されていないかどうかを確認する必要があります。

私は.gitignoreを修正し、新しいコミットをプッシュしてサーバー上で使用しましたが、今は正常に動作します。

関連する問題