【发布时间】:2018-11-29 17:24:51
【问题描述】:
我在 docker 中成功运行了一个简单的 dotnet core 2.1 Web API 应用程序,但我想在自定义帐户而不是 root 下运行它,因为这被认为是最佳实践。
我可以添加一个帐户并更改该帐户,但 Kestral 在启动时会引发错误。
我在网上反复搜索,找不到任何解决方案。
这是 Docker 文件。
FROM sel-docker.artifactory.metro.ad.selinc.com/microsoft/dotnet:2.1.500-sdk-
alpine3.7 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 sel-docker.artifactory.metro.ad.selinc.com/microsoft/dotnet:2.1.6-
aspnetcore-runtime-alpine3.7
# Create a group and user
RUN addgroup -S -g 1000 customgroup \
&& adduser -S -u 1000 -G customgroup -s /bin/sh customuser
WORKDIR /app
RUN mkdir -p /local/
COPY --from=build-env /app/out .
RUN chown customuser:customgroup /local
RUN chown customuser:customgroup /app
# Tell docker that all future commands should run as the appuser user
USER 1000
ENTRYPOINT ["dotnet", "ConfigApi.dll"]
这是我运行生成的图像时出现的 Kestral 错误。
crit: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to start Kestrel.
System.Net.Sockets.SocketException (13): Permission denied
...
有人解决了吗?
【问题讨论】:
-
你绑定到 Kestrel 的哪个端口?
-
此时仅端口 80。如果我省略 USER customuser 行,这运行正常。
标签: docker .net-core dockerfile