별도의 웹 앱을위한 통신 서비스로 사용되는 응용 프로그램을 개발했습니다. 웹 응용 프로그램을 "독점"하는 0 문제가 있었지만 서비스는 악몽으로 판명되었습니다. JavaFX를 기반으로하며 구성 파일에서 사용자가 설정할 수있는 속성이 있으므로 앱이 창, 메뉴, 컨테이너 등을 초기화하지 않도록합니다.이 "헤드리스"모드 (정확하지는 않습니다) headless ...)는 효과적으로 서비스 앱을 백그라운드 서비스로 바꿉니다. 또한 Windows 10 컴퓨터에서 실행될 때 앱이 완벽하게 작동하고 문제없이 다른 모든 컴퓨터 (도킹되지 않은)에 배포했다고 말 함으로써이 서문을 시작하겠습니다.
다음은 내가 만든 도커 파일입니다.
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.
초기 메시지는 NVidia 드라이버가없는 컨테이너로 인한 것이지만 소프트웨어 파이프 라인으로의 대체는 잘 작동하는 것으로 보입니다. 솔직히 나는 치명적인 IO 오류가 어떤 원인 일 수 있는지 전혀 모른다. 도커를 실행하는 다른 호스트에서 시도했지만 동일한 문제가 발생합니다.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 더 좋은 점은 JavaFX 앱을 헤드리스로 만드는 방법에 대한 아이디어가 있으며 초기화 할 필요조차 없습니까? 헤드리스를 실행할 때 작업과 JavaFX의 일부를 사용하므로 사용할 수 없습니다 ...
-v /tmp/.X11-unix:/tmp/.X11-unix
? Xserver에 연결하려는 앱은 "헤드리스"가 아니며 구현을 검토해야한다고 제안합니다.