Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Docker上运行Java Swing GUI应用程序_Java_Swing_Docker_Dockerfile_Unsatisfiedlinkerror - Fatal编程技术网

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

在Docker上运行Java Swing GUI应用程序,java,swing,docker,dockerfile,unsatisfiedlinkerror,Java,Swing,Docker,Dockerfile,Unsatisfiedlinkerror,我正在尝试使用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

我正在尝试使用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。 设置为:

1) 安装Linux

2) 安装JDK

3) 复制到包含 罐子

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

我在windows上使用Xlaunch作为终端,并且能够使用它在docker上启动firefox

这是第一个docker文件 这是第二个docker文件 我在第一个dockerfile中遇到此错误 $docker run-ti--rm-e DISPLAY=10.193.146.124:0.0 myDocker:1.0 线程“main”java.lang.UnsatifiedLinkError中出现异常: /opt/jdk1.8.0_202/jre/lib/amd64/libawt_xawt.so:libXext.so.6:无法 打开共享对象文件:没有这样的文件或目录 位于java.lang.ClassLoader$NativeLibrary.load(本机方法) 位于java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) 位于java.lang.Runtime.load0(Runtime.java:809) 位于java.lang.System.load(System.java:1086) 位于java.lang.ClassLoader$NativeLibrary.load(本机方法) 位于java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845) 位于java.lang.Runtime.loadLibrary0(Runtime.java:870) 位于java.lang.System.loadLibrary(System.java:1122) 位于java.awt.Toolkit$3.run(Toolkit.java:1636) 位于java.awt.Toolkit$3.run(Toolkit.java:1634) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.awt.Toolkit.loadLibraries(Toolkit.java:1633) 位于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中执行此操作的正确方法吗。

做了更多的研究,通过点击和试用,以下代码似乎启动了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

您将发现在主机上安装JVM并在那里运行jar文件要容易得多。要做到这一点,您还需要在Windows主机系统上安装一个X服务器,并处理Docker Toolbox VM、容器和主机之间的X转发和权限问题;这是在图像中获得正确的库堆栈之后。据我所知,Docker不是运行交互式桌面应用程序的好方法。你使用的是阿尔卑斯山3.2,这是很古老的。2.更重要的是,错误消息表明Java无法加载本机库-这可能意味着严重的libc不兼容(Alpine基于musl libc,而不是更常见的glibc)。考虑使用<代码> Ubuntu:18.04 。@ ValiaNo尝试用最新的阿尔卑斯山仍然没有运气。@ David Maze尝试使用Ubuntu,但在使用卷曲或MKDRITES时没有获得许可错误。请将此信息包含在您的问题中。@Deep很高兴您的问题得到了解决
openjdk:8
基于Debian stretch——这可能比Alpine更适合此用例,因为它基于glibc。@emix:我相信是的,因为问题是使用dockerfile运行自定义jar。我遇到的问题是由于我使用的工具(这里是Alpine Linux),现在我更改了工具(openjdk)但问题还是一样,这样做就解决了。如果你仍然有其他想法,请告诉我,我将很高兴将其包括在问题中。
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
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