Docker 在没有图形环境的情况下启动java应用程序

Docker 在没有图形环境的情况下启动java应用程序,docker,Docker,当我从docker内部运行应用程序时,会出现以下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(Graphi

当我从docker内部运行应用程序时,会出现以下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)

我正在使用亚马逊提供的Ubuntu桌面进行测试。如果我在Ubuntu桌面上安装Java应用程序(不带docker),它将按预期工作。这是docker的问题还是我访问Amazon cloud ubuntu的方式?

你应该设置headless模式,通过java.awt.headless=true,使用如下方式:

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

您应该设置headless模式,通过如下方式传递
java.awt.headless=true

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

有多种方法可以做到这一点。最常见的方法是将主机X11显示共享给docker容器

docker run -d \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /etc/localtime:/etc/localtime \
    -e DISPLAY=unix$DISPLAY \
    <yourcontainer>
下面是一些更相关的参考,如果您需要使用X11显示版本,可以参考这些参考


有多种方法可以做到这一点。最常见的方法是将主机X11显示共享给docker容器

docker run -d \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v /etc/localtime:/etc/localtime \
    -e DISPLAY=unix$DISPLAY \
    <yourcontainer>
下面是一些更相关的参考,如果您需要使用X11显示版本,可以参考这些参考