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

Dee*_*eep 5 java swing unsatisfiedlinkerror docker dockerfile

我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)

我正在运行一个 dockerfile。设置是:

1)安装Linux

2)安装JDK

3)复制包含JAR的文件夹

4) 运行 docker 容器,这将打开 GUI(不是 Linux 前端,最好不使用 vnc)。

我在 Windows 上使用Xlaunch作为终端,并且能够使用它在 docker 上启动 Firefox。

这是第一个 docker 文件

FROM anapsix/alpine-java
COPY ./myJarFolder /home/myJarFolder
CMD ["java","-jar","/home/myJarFolder/myJarFile.jar"]
Run Code Online (Sandbox Code Playgroud)

这是第二个docker文件

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
Run Code Online (Sandbox Code Playgroud)

我在第一个 dockerfile 中遇到此错误

$ docker run -ti --rm -e DISPLAY=10.193.146.124:0.0 myDocker: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(Native Method) 处,java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 处,没有此类文件或目录。 .ClassLoader.loadLibrary(ClassLoader.java:1824) 在 java.lang.Runtime.load0(Runtime.java:809) 在 java.lang.System.load(System.java:1086) 在 java.lang.ClassLoader$NativeLibrary。加载(本机方法) 在 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章)

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

有人可以告诉我在 Windows 中执行此操作的正确方法吗?

Dee*_*eep 2

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