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 上构建您的图像。但请注意,它仍然是一个(不错的工作)预览。
我有一个带有多个 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 上构建您的图像。但请注意,它仍然是一个(不错的工作)预览。