当前位置: 首页 > 知识库问答 >
问题:

在Docker上运行Java Swing GUI应用程序

皮骏
2023-03-14

我正在尝试使用Windows中的docker工具箱运行自定义java swing GUI。我现在想要容器化这个应用程序,但是得到以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: 
/opt/jdk1.8.0_202/jre
/lib/amd64/libawt_xawt.so: libXext.so.6: cannot open shared object file: 
No such file or directory

我正在运行一个DockerFile。设置为:

3)复制到包含JAR的文件夹上

4)运行docker容器,该容器将启动GUI(不是linux前端,最好不使用vnc)。

我将Xlaunch用于windows上的终端,并且能够使用它在docker上启动一个firefox。

FROM anapsix/alpine-java
COPY ./myJarFolder /home/myJarFolder
CMD ["java","-jar","/home/myJarFolder/myJarFile.jar"]
FROM alpine:3.2

MAINTAINER Anastas Dancha [...]

# Install cURL

RUN apk --no-cache add ca-certificates

# Java Version

ENV JAVA_VERSION_MAJOR 8

ENV JAVA_VERSION_MINOR 45

ENV JAVA_VERSION_BUILD 14

ENV JAVA_PACKAGE       jdk

# Download and unarchive Java

RUN mkdir /opt && / curl -jksSLH "Cookie: oraclelicense=accept-securebackup-cookie" && / http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-b${JAVA_VERSION_BUILD}/${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz | tar -xzf - -C /opt && / ln -s /opt/jdk1.${JAVA_VERSION_MAJOR}.0_${JAVA_VERSION_MINOR} /opt/jdk && / rm -rf /opt/jdk/*src.zip && /opt/jdk/lib/missioncontrol && /opt/jdk/lib/visualvm && /opt/jdk/lib/*javafx* && /opt/jdk/jre/lib/plugin.jar && /opt/jdk/jre/lib/ext/jfxrt.jar && /opt/jdk/jre/bin/javaws && /opt/jdk/jre/lib/javaws.jar && /opt/jdk/jre/lib/desktop && /opt/jdk/jre/plugin && /opt/jdk/jre/lib/deploy* && /opt/jdk/jre/lib/*javafx* && /opt/jdk/jre/lib/*jfx* && /opt/jdk/jre/lib/amd64/libdecora_sse.so && /opt/jdk/jre/lib/amd64/libprism_*.so && /opt/jdk/jre/lib/amd64/libfxplugins.so && /opt/jdk/jre/lib/amd64/libglass.so && /opt/jdk/jre/lib/amd64/libgstreamer-lite.so && /opt/jdk/jre/lib/amd64/libjavafx*.so &&    /opt/jdk/jre/lib/amd64/libjfx*.so

# Set environment

ENV JAVA_HOME /opt/jdk

ENV PATH ${PATH}:${JAVA_HOME}/bin   

# COPY myJarFolder from local repository to the image

COPY ./myJarFolder /usr/local/myJarFolder 

# Start the image with the jar file as the entrypoint

ENTRYPOINT ["java", "-jar", "usr/local/myJarFolder/myJarFile.jar"]

# EOF

$docker run-ti--rm-e display=10.193.146.124:0.0mydocker:1.0线程“main”java.lang.unsatisfiedLinkError:/opt/jdk1.8.0_202/jre/lib/amd64/libawt_xawt.so:libxext.so.6:无法打开共享对象文件:java.lang.classloader中没有此类文件或目录$nativelibrary.load(本机方法)java.lang.classloader.loadlibrary0(本机方法)java.lang.classloader.loadlibrary0(本机方法在java.awt.Toolkit.(toolkit.java:1670)在java.awt.Component.(component.java:593)在java.lang.class.forName0(本机方法)在java.lang.class.forName(class.java:348)在org.eclipse.jdt.internal.jarinjarloader.jarrsrcloader.main(JarRsrcLoa der.java:56)

我在mkdir/opt行得到第二个dockerfile的权限错误。

谁能请让我知道正确的方法做它在Windows。

共有1个答案

许正平
2023-03-14

我做了一些更多的研究,通过命中和试用,下面的代码似乎启动了GUI,之后有一些错误,但这一定是由于GUI本身的一些其他问题:

FROM openjdk:8

# Set environment

ENV JAVA_HOME /opt/jdk

ENV PATH ${PATH}:${JAVA_HOME}/bin   

# COPY myJarFolder from local repository to the image

COPY ./myJarFolder /usr/local/myJarFolder

# Start the image with the jar file as the entrypoint

ENTRYPOINT ["java", "-jar", "/usr/local/myJarFolder/myJarFile.jar"]

# EOF
 类似资料:
  • 我最近几天的问题是,我正在尝试加密我的一些项目,我正在工作。由于Docker对我来说是一个很好的解决方案(如果它在本地运行,它将在远程运行),据我所知,我得到了3层可以实现我的ssl证书。第一层是实例或虚拟机(在我的例子中是本地的,aws或Google)。第二层是Docker守护进程(充当服务器或所有运行容器的管理器),最后一层是运行在jdk-alpine环境(可能是tomcat服务器)上的spr

  • 问题内容: 我正在尝试运行此项目-https://github.com/JumboInteractiveLimited/codetest 我已经下载了Docker工具箱,并执行了GitHub页面上提到的build和run命令,但是当我尝试访问http:localhost:8080时,该页面仍然不可用。 当我尝试再次执行运行时,Docker说 编辑 :澄清一下,我只有在第二次运行时才收到该错误。当我

  • 我意识到这个问题(Windows容器可以托管在Linux上吗?),但它并没有真正回答我的问题。 我是Docker的新手,但我的问题是这样的--如果我把任何windows应用程序放在Docker容器中,它现在能在Linux上运行吗?反之亦然? Confluent声称它只能在linux上运行,但我的同事使用Docker在Windows上安装了它。所以如果你能用Docker安装它,那么整个应用程序肯定会

  • Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。 Hello world 现在让我们来试试 $ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world 刚才你启动了你的第一个容器! 那么刚才发生了什么? 我们逐步来分析 docker run 命令做了哪些事情。 首先,

  • 我有一个akka-http应用程序,在本地工作得很好,我有一些问题“dockerizing”应用程序。我通过Dockerfile构建docker映像,并使用docker-entrypoint执行java-jar命令。当我第一次访问正在运行的docker容器时,应用程序并没有运行,但是如果我访问容器并手动执行java-jar命令,应用程序就会启动良好。如果我执行以下命令(在容器内),应用程序也会正常

  • 机器A和B之间的通信工作良好。我可以运行像或这样的命令,它会给出预期的结果: 我听说过,但还没有尝试过,但据我所知,这并不能解决我的问题。 有什么方法可以直接使用来实现这一点。解决办法可能是使用连接到远程主机,并直接从远程主机使用客户机,但我希望尽可能避免这种解决方案。 在上运行,而不是在本地计算机上运行。