spring-boot - spring boot - 不能在Docker上运行JavaFX应用超过几分钟

我开发了一个应用程序作为一个单独的web应用程序的通信服务,它基于JavaFX,并且可以由用户在配置文件中设置一个属性,因此该应用程序不会初始化窗口,菜单,容器等,

这是我的dockerfile:


FROM openjdk:13.0.1-slim


RUN apt-get update && apt-get install libgtk-3-0 libglu1-mesa -y && apt-get update


VOLUME /tmp


ADD Some_Service-0.0.1-SNAPSHOT.jar Some_Service-0.0.1-SNAPSHOT.jar


ADD lib lib


ADD config.properties config.properties


ENTRYPOINT ["java","--module-path","lib/javafx-sdk-13","-jar","Some_Service-0.0.1-SNAPSHOT.jar"]



然后我使用这个命令构建容器:


docker run -t --name Some_Service -e DISPLAY=192.168.1.71:0.0 -e SERVICE_HOME= --link mySQLMD:mysql some_service



假设VcXsrv在我的PC上运行,该应用程序可以正确启动,尽管在首次启动时确实会给出以下警告:


libGL error: No matching fbConfigs or visuals found


libGL error: failed to load driver: swrast


Prism-ES2 Error : GL_VERSION (major.minor) = 1.4



问题是它只能工作2分钟左右,最后,容器出现此错误并崩溃:


Gdk-Message: 15:28:54.770: java: Fatal IO error 11 (Resource temporarily unavailable) on X server 192.168.1.71:0.0.



我曾尝试在运行docker的不同主机上发生相同的问题。

怎么修复这个问题?

时间:

尝试在你的容器中安装xvfb创建一个虚拟屏幕,添加到Docker文件:


apt-get install xvfb


ENV DISPLAY=:99



你需要使用命令从docker启动xvfb


Xvfb :99 -screen 0 640x480x8 -nolisten tcp &



使用运行脚本更改入口点,并从上方添加xvfb命令和java start命令,

-e DISPLAY=192.168.1.71:0.0 Docker run命令中删除

...