Как запустить сервер Jetty с именем root, чтобы дать моему приложению все необходимые разрешения?
Укажите пользователя при запуске контейнера:
docker run -d --user root:root --name jetty -v ... jetty:jdk13
Это будет работать, но это не очень хорошая практика, потому что дает слишком много прав пользователю, запускающему контейнер.
Большинство изображений по умолчанию запускаются соответствующим пользователем с правами на строго обязательные элементы предотвратить это.
Я очень новичок с Docker.
Начинающим или опытным, когда вы хотите "поиграть" с пользователем / томами на изображении, которое вы не делаете. Не знаю, эмпирическое правило читает документацию . Если этого недостаточно, вы все равно можете покопаться в его DockerFile.
В do c вы можете прочитать:
По умолчанию это изображение начинается как пользователь root и использует Jetty's. Модуль setuid для сброса привилегий пользователю после инициализации. Каталог JETTY_BASE в / var / lib / jetty принадлежит jetty: jetty (uid 999, gid 999).
На самом деле это не является исчерпывающим. Все каталоги, используемые Jetty в контейнерах, принадлежат Jetty:
Среда Jetty по умолчанию на изображении:
JETTY_HOME = / usr / local / jetty
JETTY_BASE = / var / lib / jetty
TMPDIR = / tmp / jetty
Хотя это будет работать, если вы смонтируете / привязываетесь к этому каталогу, это выглядит как хак, потому что они не предназначены для хранения данных приложения.
Здесь более чистый подход заключается в настройке изображения для добавления в него папки, предназначенной для хранения данных приложения.
Это не сложно.
1) Создайте DockerFile
для настроенного изображения пристани.
Например my-jetty-DockerFile
:
FROM jetty:jdk13
VOLUME my-app-data
RUN mkdir my-app-data
RUN chown jetty:jetty my-app-data
2) Создайте это изображение:
docker build -t jetty-with-data-vol:jdk13 -f my-jetty-DockerFile .
3) Запустите контейнер этого образа с подключенным томом:
docker run -d --name my-jetty -v jetty-vol:/my-app-data jetty-with-data-vol:jdk13