Для запуска контейнера .net в кубернетес манифесте для деплоймента используется контекст безопасности.
spec:
securityContext:
fsGroup: 1001
runAsNonRoot: true
runAsUser: 1001
В докерфайле user c ID=1001 не создается и не существует (там вообще нового пользователя не создается).
При этом, если зайти на работающий под в интерактивный терминал, например с помощью
k -n {namespace} -it {pod-name} -- /bin/bash
то получаешь приглашение в виде
I have no name!@{pod_name}:/application$ whoami
whoami: cannot find name for user ID 1001
что имеет смысл, т.к. такого ID в контейнере не существует. Тем не менее контейнер как-то работает.
Тоже самое можно получить при запуске докер контейнера на своей машине с публичным образом.
docker run -d --user 1001 ubuntu:latest sleep infinity
docker exec -it 50db203325e2cf80b03a1aae42c735208501c2783b3e2ce4ae0d0cd3685fdcb0 /bin/bash
I have no name!@50db203325e2:/$
3 вопроса
1) Как понимать это приглашение, почему пользователя с ID=1001 нет, а контейнер работает?
2) Является ли хорошей практикой создать пользователя в докерфайле командой типа: useradd --no-create-home appuser -u 5001 -g 5001 и в дальнейшем использовать его ID в установках securityContext? Или создавать не обязательно?
3) Если в системе на которой работает под/контейнер будет User с ID=5001 получит ли user в контейнере права из хоста?