LoginSignup
1
2

More than 5 years have passed since last update.

Alpine LinuxでJenkinsの自作Dockerイメージを起動した時にAWTエラーが発生する

Last updated at Posted at 2017-04-28

経緯

Dockerfileを書かずにansibleロールを再利用できないか試行錯誤中です。
ansible-containerを試したり、
ansibleのDocker Connection Pluginを使って
1. containerの作成
2. プロビジョニング
3. containerのコミット
4. containerの破棄
を一貫してansibleのplaybookで行ったりしましたがイマイチしっくりきません。
例:OpenVPNサーバー

次の選択肢としてpackerを試しています。
題材としてAlpine LinuxをベースイメージにJenkinsを構築していたところ、hudson.util.AWTProblem: java.lang.NullPointerExceptionが発生したので解決法を記します。

環境

ホスト

macOS Sierra 10.12.4

  • ansible 2.2.1.0
  • docker 17.03.1-ce, build c6d412e
  • packer 1.0.0

イメージレイヤ

  1. alpine:3.5
  2. shomatan/python:latest-alpine ansibleの実行でpythonが必要なため
  3. shomatan/java:8-alpine
  4. shomatan/jenkins:2.46.2-alpine

docker run

docker run --rm -p 8080:8080 shomatan/jenkins:2.46.2-alpine

エラー...

SEVERE: Failed to initialize Jenkins
hudson.util.AWTProblem: java.lang.NullPointerException
        at hudson.WebAppMain.contextInitialized(WebAppMain.java:191)
        at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800)
        at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444)
        at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:791)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:294)
        at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
        at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
        at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
        at org.eclipse.jetty.server.Server.start(Server.java:387)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
        at org.eclipse.jetty.server.Server.doStart(Server.java:354)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at winstone.Launcher.<init>(Launcher.java:152)
        at winstone.Launcher.main(Launcher.java:352)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at Main._main(Main.java:264)
        at Main.main(Main.java:112)
Caused by: java.lang.NullPointerException
        at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
        at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
        at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
        at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
        at sun.font.SunFontManager$2.run(SunFontManager.java:431)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.<init>(SunFontManager.java:376)
        at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
        at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
        at java.awt.Font.getFont2D(Font.java:491)
        at java.awt.Font.getFamily(Font.java:1220)
        at java.awt.Font.getFamily_NoClientCode(Font.java:1194)
        at java.awt.Font.getFamily(Font.java:1186)
        at java.awt.Font.toString(Font.java:1683)
        at hudson.util.ChartUtil.<clinit>(ChartUtil.java:260)
        at hudson.WebAppMain.contextInitialized(WebAppMain.java:190)
        ... 23 more

ブラウザでhttp://localhost:8080 を開くと
Screen Shot 2017-04-26 at 14.08.39.png

ENTRYPOINTには ["dumb-init", "java", "-Djava.awt.headless=true", "-jar", "/usr/share/jenkins/jenkins.war"] と指定しています。

解決法

apkでttf-dejavuパッケージをインストール。

終わりに

肝心な解決法は1行に、ほとんどPacker+Docker+Ansibleについて言及してしまいました。
今やMacの構築とほとんどの作業をansibleで行うほどのansible厨になっています。
Dockerfileを書くに越したことはないのですが、shell芸を学ぼうにもモチベーションが足りません。
Packer+Docker+Ansibleでの知見が深まったら記事にしようと思います。
フィードバックお待ちしています!

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2