Полагаю, вы говорите об официальном Gradle образе на Docker Hub.
Образ gradle:4.6
разработан и предназначен для запуска от имени пользователя gradle
(UID 1000).
$ docker inspect gradle:4.6 --format '{{.Config.User}}'
gradle
$ docker run --rm --entrypoint id gradle:4.6
uid=1000(gradle) gid=1000(gradle) groups=1000(gradle)
Поэтому он работает только при запуске образа от имени пользователя root
(UID 0) или gradle
(UID 1000).
# These all work.
$ docker run --rm --user 0 gradle:4.6
$ docker run --rm --user root gradle:4.6
$ docker run --rm --user 1000 gradle:4.6
$ docker run --rm --user gradle gradle:4.6
# However, this doesn't work.
$ docker run --rm --user 1234 gradle:4.6
FAILURE: Build failed with an exception.
* What went wrong:
Failed to load native library 'libnative-platform.so' for Linux amd64.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Следовательно, вам просто нужно убедиться, что вы запускаете контейнер как пользователь 1000
или gradle
(в любой среде выполнения контейнера, которую вы используете). И поскольку образ gradle:4.6
настроен для работы с 1000
, при создании нового образа на основе gradle:4.6
он должен работать нормально почти на всех платформах среды выполнения контейнера (если вы не переопределите настроенного пользователя на уровне платформы) .
(Теперь следующее предполагает, что вы используете Jib для создания другого Gradle-подобного изображения на основе gradle:4.6
и что вы используете это новое Gradle-подобное изображение в Kubernetes. следующее не применяется, если вы используете Jib для контейнерирования обычного образа приложения внутри gradle:4.6
.)
Однако в Jib есть ошибка , которая не наследует настроенного пользователя из базового изображения. Ошибка будет исправлена в следующем выпуске 2.3.0. В то же время вы можете явно указать Jib настроить пользователя во встроенном образе. В build.gradle
установите
jib.container.user = 'gradle:gradle'
или, если вы предпочитаете цифры c UID и GID,
jib.container.user = '1000:1000'
. Или вы можете установить системное свойство в командной строке:
./gradlew -Djib.container.user='gradle:gradle' ... jib
Другой вариант - установить правильного пользователя на стороне Kubernetes. Например, в securityContext
вы можете установить runAsUser: 1000
и runAsGroup: 1000
.
Наконец, хотя gradle:4.6
создан для работы в качестве пользователя gradle
(UID 1000) Я вижу, что недавно они отменили это решение. Теперь gradle:latest
настроен для работы как root
.
$ docker run --rm --entrypoint id gradle
uid=0(root) gid=0(root) groups=0(root)