Мне нравится, как Docker управляет томом, портом и сетью.
Но я обнаружил, что в Docker отсутствует что-то для правильного управления пользователем (отсюда и разрешение на файл / том).
Использованиеcase:
"с GitlabCI, запускается от имени пользователя gitlab
, мы используем образ Docker gradle для создания приложения"
(https://hub.docker.com/_/gradle/которые правильно объявляют пользователя gradle
).
Это изображение создает файлы jar, принадлежащие пользователю gradle
, поэтому пользователь gitlab
не может очистить эти файлы => нарушить GitlabCI.
Если я запускаю Docker с --user=$UID
, файлывсе в порядке, но поскольку gitlab
не является допустимым пользователем в образе Gradle Docker, некоторые модульные тесты Java не пройдены (средства безопасности Java).
Моим решением было создать пользователя в образе Docker:
#!/bin/sh
BUILD_CMD="gradle build"
set -eux
if test -n "$USER_UID" && test -n "$USER_NAME"; then
adduser --uid $USER_UID --quiet --home /home/gradle --disabled-password --gecos "djobi" $USER_NAME
exec su -c "$BUILD_CMD" $USER_NAME
else
exec $BUILD_CMD
fi
Это работает нормально, мне интересно, есть ли лучшее решение, более глобальное, чтобы повлиять на ВСЕ работающие контейнеры моего docker-compose.yml?