ASP.NET 核心 运行 在 Raspberry Pi 群上

ASP.NET Core running on a Raspberry Pi Swarm

我有一个带有多个 Raspberry Pi(raspbian 灯)的 Docker Swarm。我试着 运行 ASP.NET 核心容器作为服务/堆栈。

我有以下 Docker 文件:

FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /source
COPY WebApi.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /publish -r linux-arm /p:PublishWithAspNetCoreTargetManifest="false"

FROM microsoft/dotnet:2.0-runtime-deps-stretch-arm32v7
ENV ASPNETCORE_URLS http://+:80
WORKDIR /app
COPY --from=build /publish .
ENTRYPOINT [ "./WebApi" ]

什么有效: 在我的 win10 笔记本电脑上构建和推送容器映像(直到 sdk 映像仅适用于 x64)并 运行 使用 docker run:

在单个树莓节点上连接容器
docker run --rm -it myrepo/myimage
Hosting environment: Production
Content root path: /app
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.

(因此容器可以 运行 并且这不是 arm vs x64 问题)

什么不起作用:

docker service create myrep/myimage
2n4ahyhgb3ju5rvo97tekh9vg
overall progress: 0 out of 1 tasks
1/1: no suitable node (unsupported platform on 3 nodes)

当然还有 docker stack deploy.

如果我检查创建的图像(甚至是来自 Microsoft 的 arm32v7 图像),它只会显示 amd64 而不是 arm

"Architecture": "amd64",
"Os": "linux",

所以这是元数据错误的情况吗?如果你使用 swarm,哪个只被 docker 检查?我怎样才能改变它/使它成为 运行?自己构建基础镜像?我错过了什么吗?

编辑 1 我用 .NET Core 2.1 图像尝试过它并且有相同的行为。

随着昨天发布的最新 .NET Core 2.1 预览版 2 图像终于可以运行了。

更新(添加 Dockerfile): 这个简单的方法应该可以解决问题:

FROM microsoft/dotnet:2.1-sdk-stretch-arm32v7 AS builder
ENV DOTNET_CLI_TELEMETRY_OPTOUT 1
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /publish -r linux-arm

FROM microsoft/dotnet:2.1-runtime-deps-stretch-slim-arm32v7
WORKDIR /app
COPY --from=builder /publish .
ENTRYPOINT [ "./MyService" ]

您现在甚至可以在 raspberry pi 上构建您的图像。但请注意,它仍然是一个(不错的工作)预览。