0

I get the following Java exception when I run my application from within docker.

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)

My docker file looks like this...

# 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"]

I am using Ubuntu Desktop provided by Amazon for testing. If I install the Java Application on Ubuntu desktop (without docker) it works as expected. Is this docker problem or the way I access Amazon cloud ubuntu?

shantanuo
  • 31,689
  • 78
  • 245
  • 403

2 Answers2

2

you should set up headless mode, passing java.awt.headless=true, using something like this:

CMD ["java", "-Djava.awt.headless=true", "-jar", "/usr/src/myapp/dist/myap.jar"]
Simonluca Landi
  • 931
  • 8
  • 21
2

There are multiple ways to do it. The most common way is to share your host X11 display to the docker container

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

Next as @SimonlucaLandi, suggested you can run a headless version

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

Below are some more related references that you can refer if you need to go the X11 display version

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

Tarun Lalwani
  • 142,312
  • 9
  • 204
  • 265