【问题标题】:docker container with user created, where on host带有用户创建的 docker 容器,在主机上
【发布时间】:2018-11-15 22:16:18
【问题描述】:

我有一个创建了用户的 dockerfile,因此它没有以 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

没有应用用户的迹象。我的理解(可能是错误的)是我们正在使用共享内核,并且用户应该在列表中。 我也查了uid

getent passwd 1001

没有返回任何结果。 有人可以解释一下吗,因为我不明白进程如何在主机上以 1001 的 uid 运行并且没有关联的用户

【问题讨论】:

    标签: docker containers


    【解决方案1】:

    用户 ID 与主机共享:它是 1001。该用户的 name 来自于在 /etc/passwd 文件中查找。由于宿主机和容器有不同的文件系统空间,所以它们有不同的passwd文件;内核对用户名一无所知。

    对应的FAQ:不管你在主机和容器中是否都有用户名为pat;如果他们的数字用户 ID 不匹配,并且您使用的是 Linux,并且您尝试与 docker run -v 共享内容,则一个用户将无法访问另一个用户的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多