У меня есть файл Docker, созданный пользователем, поэтому он не работает от имени пользователя root (лучшая практика)
FROM microsoft/dotnet:sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
RUN groupadd -g 1001 appuser && useradd -r -u 1001 -g appuser appuser
USER appuser
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "ConsoleApp32.dll"]
Я создаю образ и запускаю контейнер:
docker build -f Dockerfile1 -t myappimage .
docker run -d --name myapp myappimage
Изатем проверьте, что он работает:
ps aux | grep dotnet
21569 1001 0:00 dotnet ConsoleApp32.dll
Итак, работает как uid 1001. Затем я проверяю хост для этого пользователя:
cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
man
postmaster
cron
ftp
sshd
at
squid
xfs
games
postgres
cyrus
vpopmail
ntp
smmsp
guest
nobody
dockremap
Нет признаков appuser.Я понимаю (что может быть неправильно), что мы используем общее ядро, и пользователь должен быть в списке.Я также посмотрел на uid
getent passwd 1001
, который не дал результата.Может кто-нибудь объяснить это, так как я не понимаю, как процесс выполняется на хосте с идентификатором пользователя 1001 и нет ассоциированного пользователя