2017-10-31 5 views
0

私は、外部XLSXリソースを取得し、Apache-POIJARはローカルに動作しますが、ハングはドッカーコンテナに失敗した - のApache-POIを

FileInputStream file = new FileInputStream("sheets/template.xlsx"); 
    Workbook workbook = new XSSFWorkbook(file); 

私はローカルでJARを実行し、すべてのものを持つワークブックを開くJARを持っていますしかし、DockerでJARを実行すると、JARはワークブックを作成しようとしたときにハングしていて例外はスローされず、何もスムーズに動作しません。

アイデア?私はより多くの情報を提供することができます。

編集詳細:

/シート/ディレクトリには、私のコンテナのルートディレクトリに存在している:

enter image description here

私は-jar app.jar上でJavaを実行する場合ことを言及すべきです私のローカルマシンでは、すべて次のファイル構造でスムーズに動作します:

. 
+-- app.jar 
+-- sheets/ 
    +-- template.xlsx 
+3

詳しい情報は、あなたがドッカーを実行する方法については必要とされています。ドッカーのコンテナ内に/sheets/template.xlsxにアクセスできますか(I.E.パーミッション、既に存在しますか?)、またはボリュームとマッピングされていますか?また、ドッカーが何かがログに記録されているかどうかを調べることができますか? –

+0

私はコンテナのマッピングに関する情報を追加しました。ドッカーの検査とドッキングトップでJARがハングしたりクラッシュしたりすることはありません。 – Simmeringc

答えて

2

ファイルへのパスは私にとって怪しいようです。 "/sheets/template.xlsx"はあなたがいる環境のルートを意味しますが、あなたの出力によれば、あなたはコンテナのルートになく、代わりに/ usr/src/appにあります。文字列が "sheets/template.xlsx"になるように "/"を取り出すか、ディレクトリ "/usr/src/app/sheets/template.xlsx"への絶対パスに変更してください。

あなたのボックス(ドッカーの外)で、app.jarはルートに存在しますか?もしそうなら、それはすべてを説明するでしょう。

+0

私の上記のコードは間違っていました。私は実際にはfileInputStreamを使用していますが、リソースストリームではありません。 '' ' FileInputStream file = new FileInputStream(" sheets/template.xlsx "); '' ' これは上記のファイル構造とローカルで動作しますが、私は(" /usr/src/app/sheets/template.xlsx ")しようとしましたが、まだハングアップしています。試してみてください。 – Simmeringc

+0

template.xlsxが正しくパッチングされていない場合、プログラムがそれを見つけることができるように、何らかの理由でブックを作成しようとするとハングアップするだけで、FileNotFoundExceptionが発生します。ここでも、これはコンテナの外で動作します。 – Simmeringc

0

私のプログラムにはメモリリークがあり、ローカルマシンの割り当てられたドッカーメモリを超えています。ドッカーは、ローカルに教えてくれないだろうが、Herokuのは、私に知らせて:

enter image description here

関連する問題