Alpine LinuxでJenkinsの自作Dockerイメージを起動した時にAWTエラーが発生する
経緯
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
イメージレイヤ
- alpine:3.5
- shomatan/python:latest-alpine ansibleの実行でpythonが必要なため
- shomatan/java:8-alpine
- 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 を開くと
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での知見が深まったら記事にしようと思います。
フィードバックお待ちしています!
参考
Author And Source
この問題について(Alpine LinuxでJenkinsの自作Dockerイメージを起動した時にAWTエラーが発生する), 我々は、より多くの情報をここで見つけました https://qiita.com/shomatan/items/da9303ca71b2bc3aff07著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .