我有一个java应用程序,它连接到我之前设置的AmazonEC2服务器,该服务器使用swing和AWTJava库在FrameGUI中运行协作白板应用程序,并在端口8888上使用套接字编程。这个应用程序工作得很好,但我正在努力让它作为一个码头形象的工作。我已经将项目导出为一个名为“col\u whiteboard.jar”的.jar文件,并且我要运行的jar文件中的类名为“drawcanvas”。这是与.jar文件位于同一目录中的dockerfile:
FROM azul/zulu-openjdk-alpine:11 as packager
WORKDIR ./whiteboard
COPY col_whiteboard.jar .
EXPOSE 8888
ENV DISPLAY =:0.0
CMD ["java","DrawCanvas"]
ENTRYPOINT ["java","-jar","col_whiteboard.jar"]
这是我的生成命令:
$ docker build -t collab_board .
以及我的run命令:
$ docker run -p 8888 collab_board
当我运行命令时,我在一个ubuntu20.04虚拟机中。
我得到的错误如下:
DrawCanvaException in thread "main" java.awt.AWTError: Can't connect to X11 window server using '=:0.0' as the value of the DISPLAY variable.
请帮助我了解出了什么问题,以及如何解决它!我已经被困在这个问题上好几天了,如果这是一个愚蠢的问题,我道歉,我对docker和JavaGUI应用程序非常陌生。
更新:我已经解决了x11的问题,通过使用命令允许所有用户访问xhost xhost +
在终端中,使用run命令:
docker run --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" collab_board
但是,容器仍不运行,出现以下错误:
Exception in thread "main" java.lang.InternalError: java.lang.reflect.InvocationTargetException
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:86)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
at java.desktop/sun.font.SunFontManager.getInstance(SunFontManager.java:249)
at java.desktop/sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:265)
at java.desktop/sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1243)
at java.desktop/javax.swing.JComponent.getFontMetrics(JComponent.java:1646)
at java.desktop/javax.swing.plaf.basic.BasicLabelUI.getPreferredSize(BasicLabelUI.java:246)
at java.desktop/javax.swing.JComponent.getPreferredSize(JComponent.java:1680)
at java.desktop/java.awt.FlowLayout.layoutContainer(FlowLayout.java:609)
at java.desktop/java.awt.Container.layout(Container.java:1537)
at java.desktop/java.awt.Container.doLayout(Container.java:1526)
at java.desktop/java.awt.Container.validateTree(Container.java:1722)
at java.desktop/java.awt.Container.validateTree(Container.java:1731)
at java.desktop/java.awt.Container.validateTree(Container.java:1731)
at java.desktop/java.awt.Container.validateTree(Container.java:1731)
at java.desktop/java.awt.Container.validate(Container.java:1657)
at java.desktop/java.awt.Container.validateUnconditionally(Container.java:1694)
at java.desktop/java.awt.Window.show(Window.java:1050)
at java.desktop/java.awt.Component.show(Component.java:1716)
at java.desktop/java.awt.Component.setVisible(Component.java:1663)
at java.desktop/java.awt.Window.setVisible(Window.java:1031)
at collab_whiteboard.DrawCanvas.<init>(DrawCanvas.java:71)
at collab_whiteboard.DrawCanvas.main(DrawCanvas.java:422)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84)
... 23 more
Caused by: java.lang.NullPointerException
at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:379)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:324)
at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)
... 28 more
1条答案
按热度按时间flvlnr441#
我刚刚通过使用更新的run命令解决了这个问题,并将dockerfile更改为以下内容: