2017-08-06 119 views
0

当我在docker中运行我的应用程序时,出现以下Java异常。在没有图形环境的情况下启动java应用程序

Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it. 
     at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204) 
     at java.awt.Window.<init>(Window.java:536) 
     at java.awt.Frame.<init>(Frame.java:420) 
     at java.awt.Frame.<init>(Frame.java:385) 
     at javax.swing.JFrame.<init>(JFrame.java:189) 
     at mantra.mfs100.test.MFS100Test.<init>(MFS100Test.java:67) 
     at mantra.mfs100.test.MFS100Test$8.run(MFS100Test.java:450) 
     at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
     at java.awt.EventQueue.access$500(EventQueue.java:97) 
     at java.awt.EventQueue$3.run(EventQueue.java:709) 
     at java.awt.EventQueue$3.run(EventQueue.java:703) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

我的搬运工文件看起来像这样...

# cat Dockerfile 
FROM openjdk:8 
COPY . /usr/src/myapp 
WORKDIR "x64/mfs100_9.0.2.2_x86_redist/" 
RUN "./install.sh" 

WORKDIR /usr/src/myapp 

CMD ["java", "-jar", "/usr/src/myapp/dist/myap.jar"] 

我使用亚马逊的测试提供Ubuntu桌面。如果我在Ubuntu桌面上安装Java应用程序(没有docker),它会按预期工作。这是码头问题还是我访问亚马逊云Ubuntu的方式?

回答

0

你应该建立无头模式,通过java.awt.headless=true,使用这样的事情:

CMD ["java", "-Djava.awt.headless=true", "-jar", "/usr/src/myapp/dist/myap.jar"] 
0

有多种方式来做到这一点。最常见的方式是分享你的主机X11显示泊坞窗容器

docker run -d \ 
    -v /tmp/.X11-unix:/tmp/.X11-unix \ 
    -v /etc/localtime:/etc/localtime \ 
    -e DISPLAY=unix$DISPLAY \ 
    <yourcontainer> 

接下来的@SimonlucaLandi,建议你可以运行一个无头版本

CMD ["java", "-Djava.awt.headless=true", "-jar", "/usr/src/myapp/dist/myap.jar"] 

下面是一些更相关的文献,你可以是指如果你需要去的X11显示版本

How to view GUI apps from inside a docker container

X11 forwarding of GUI app in Docker container

https://medium.com/@dimitris.kapanidis/running-gui-apps-in-docker-containers-3bd25efa862a

相关问题