2015-07-24 3 views
1

Я использую pdfbox для создания PDF-файлов на Java. Это отлично работает при работе с моим Mac как обычным Java-приложением. Тем не менее, прецедентом является запуск этого со стороны сервера для создания pdf-файла из веб-браузера.Поколение PDF-контейнера для док-контейнера PDFBox не удается

Я развернул приложение в контейнер докеров и теперь не работает (различные ошибки при загрузке шрифтов - arrayindexoutofbounds, eofexception и т. Д.). Это, по-видимому, связано с тем, как pdfbox работает в режиме java.awt.headless, так как при выводе режима java работает на Mac, он возвращает false для режима безголовья, тогда как возвращает true на сервере.

Я установил значение java.awt.headless=fals e в свой код и теперь придумал ряд других ошибок. Отсутствие библиотек, относящихся к X-серверу и т.д. Я установил их, но теперь есть ошибка:

java.awt.AWTError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable. 

Там есть куча предложений вокруг SO и т.п., например, установка DISPLAY =: 0.0 и т. д., но ни одна из этих функций не работает. Это, очевидно, несколько сложно, работая в контейнере докеров, но может ли кто-нибудь предложить что-то здесь?

Я предполагаю, используя виртуальный XServer ответ, но я озадачен о том, как установить это, а затем установите соответствующий xsessionAuthoriy/DISPLAY/и т.д.

+0

Можете ли вы добавить в свою команду docker '-v /tmp/.X11-unix:/tmp/.X11-unix \ # mount X11 socket', чтобы разъем X11 был установлен как в хосте, так и в контейнере? Это самый простой способ, я думаю. Это извлекается из https://blog.jessfraz.com/post/docker-containers-on-the-desktop/ см. «5. Chrome», например, – user2915097

+0

приятный хак, но не работает. Это предполагает, что /tmp/.X11-unix находится на главной машине, которая, если хост-машина работает без головок (как она будет на производстве), не будет присутствовать ?? – radder5

+0

Проверьте https://linuxmeerkat.wordpress.com/2014/10/17/running-a-gui-application-in-a-docker-container/ или найдите в этом файле Dockerfile безголовный https: //registry.hub.docker .com/и/elgalu/докер-селен/dockerfile / – user2915097

ответ

1

Это не было ничего общего с запуском в безголовый как выясняется. Исходными ошибками, которые были выброшены, была фактическая ошибка (т. Е. Файлы шрифтов были повреждены), и я должен был зависнуть от их расследования.

Вопрос был в том, как maven упаковывала мое приложение со смесью бинарных и текстовых ресурсов. Добавление

<resources> 
    <resource> 
     <directory>target/classes</directory> 
    </resource> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
    </resource> 
</resources> 
<nonFilteredFileExtensions> 
    <nonFilteredFileExtension>ttf</nonFilteredFileExtension> 
</nonFilteredFileExtensions> 

на мой maven pom остановил шрифты, искалеченные.

Спасибо за указатели. Для записи я получил Xvfb и набор переменных env, который при работе вернул мне исходную ошибку о повреждении шрифтов. Чтобы заставить Xvfb работать, чтобы добраться до этого, мне пришлось переопределить точку входа в команде запуска docker, чтобы получить контейнер bash, а затем начал процесс vert.x изнутри контейнера.

Смежные вопросы