talesleaves-dev

諸々の開発のメモ。画像は面倒

Linux系OSのDockerコンテナでJava(JDK)を扱うときの注意点

原因不明のエラーが出る

Dockerコンテナ内でJavaを扱う時に、正体不明のエラーに出くわすことがあります。
通常のOS上では問題が発生しないのに、コンテナ内に展開するとNullPointerExeptionであったり、リフレクション関係のエラーが発生するケースです。
このケースでは、スタックトレースを追ってみて、クラスに*FontManagerが含まれている場合、コンテナ内のOS側のライブラリの不足が原因と考えてよいかと思います。

原因と解消法

Javaが依存しているfontconfigが、コンテナ用のOSイメージでは軽量化のためにインストールされていないことが原因です。
CentOSであれば下記で解決できます。

yum install -y fontconfig

Dockerfileであれば、RUNのコマンドに上記を追加します。
一度お試しください。

上記だけでは解決しない場合

JDKの一部のバージョンでは、フォントがひとつもインストールされていないときにも同様のエラーが発生するようです。
上記で解決しない場合はJDKのバージョンを上げるか、dejavuをインストールしてみてください。
これで無事解決してくれるとよいのですが。

追記

DockerHubで提供されているJavaイメージを利用していればこの現象には出くわさないかと思います。
自作コンテナでハマっている方がいれば、上記を疑ってください。