我有一个带有多个 Raspberry Pi(树莓派光)的 Docker Swarm。我尝试在它们上运行 ASP.NET Core 容器作为服务/堆栈。
我有以下 Dockerfile:
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
。
如果我检查创建的图像(甚至arm32v7
来自微软的图像),它只是说明amd64
而不是arm
.
"Architecture": "amd64",
"Os": "linux",
那么这是元数据错误的情况吗?如果您使用 swarm,哪个仅由 docker 检查?我怎样才能改变它/让它运行?自己构建基础镜像?我错过了什么吗?
编辑 1我尝试使用 .NET Core 2.1 图像并具有相同的行为。
借助昨天发布的最新 .NET Core 2.1 Preview 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" ]
你现在甚至可以在你的树莓派上构建你的图像。但请注意,它仍然是一个(很好的工作)预览。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句