簡體   English   中英

在Docker上運行Java Swing GUI應用程序

[英]Running Java Swing GUI application on Docker

我正在嘗試在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)復制包含JAR的文件夾

4)運行將顯示GUI的docker容器(不是linux前端,最好不使用vnc)。

我在Windows終端上使用Xlaunch ,並能夠使用此在docker上啟動firefox。

這是第一個Docker文件

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

這是第二個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

我在第一個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.loadLibrary0(ClassLoader.java:1941)處的java.lang.ClassLoader $ NativeLibrary.load(Native Method)處沒有此類文件或目錄.ClassLoader.loadLibrary(ClassLoader.java:1824)at java.lang.Runtime.load0(Runtime.java:809)at java.lang.System.load(System.java:1086)at java.lang.ClassLoader $ NativeLibrary。 java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)的load(本機方法)java.lang.Runtime.loadLibrary0(Runtime.java:870)的java.lang.ClassLoader.loadLibrary(ClassLoader.java:1845)的load(本機方法)在java.awt.Toolkit $ 3.run(Toolkit.java:1636)在java.awt.Toolkit $ 3.run(Toolkit.java:1634)在java.lang.System.loadLibrary(System.java:1122)在java.awt.Toolkit $ 3.run(Toolkit.java:1634)在java。 java.awt.Toolkit.loadLibraries(Toolkit.java:1633)上的security.AccessController.doPrivileged(本機方法) 在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM