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イメージを利用していればこの現象には出くわさないかと思います。
自作コンテナでハマっている方がいれば、上記を疑ってください。