Запуск JAXB/XJC в Dockerfile приводит к ошибке GConf
Я использую Docker в сочетании с Java-проектом, который компилируется в процессе сборки. Сейчас я пытаюсь сгенерировать код Java на основе XML-схемы Collada версии 1.5, вызвав следующий сценарий оболочки внутри Dockerfile:
BASEDIR=$(dirname $0)
xjc $BASEDIR/schema/collada/collada-schema-1.5.xsd \
-d $BASEDIR/knowrob_vis/src/main/java \
-p org.knowrob.vis.collada \
-extension $BASEDIR/schema/simpleMode.xsd
К сожалению, это приводит к следующей ошибке:
(process:4093): GConf-WARNING **: Client failed to connect to the D-BUS daemon:
Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
GConf Error: No D-BUS daemon running
На моем хост-компьютере это прекрасно работает для генерации кода Java. Вы можете найти файл Docker здесь: https://raw.githubusercontent.com/knowrob/docker/master/hydro-knowrob/hydro-knowrob-daemon_local/Dockerfile
EDIT1: Кажется, xjc имеет некоторые странные зависимости XServer. Это не имеет смысла для меня. Как избежать этой проблемы?
1 ответ
Я решил проблему. На самом деле ошибку DBus можно игнорировать.
Проблема заключалась в отсутствии разрешений на запись в каталог, где xjc пытается сгенерировать файлы. Исправлено путем переключения владельца на пользователя, который используется в Dockerfile.