在Docker上运行Java Swing GUI应用程序
我正在尝试使用windows中的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
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