Как создать образ Docker-контейнера для архитектуры ARM32 из ОС Windows 10? - PullRequest
0 голосов
/ 05 января 2019

Я разрабатываю приложение Asp.Net Core (с React-интерфейсом) для моего Raspberry Pi 3 Model B +. Приложение, основанное на шаблоне (dotnet new реагировать -o реагировать-приложение).

Я хочу разрабатывать и отлаживать приложение локально на моем ноутбуке с ОС Windows, затем создавать приложение для архитектуры ARM32, помещать образ в концентратор докеров и извлекать и запускать образ на устройстве Raspberry.

Я обнаружил, что если я собираю приложение с использованием microsoft / dotnet: 2.2-sdk и microsoft / dotnet: 2.2-aspnetcore-runtime на моем ноутбуке с Windows, то я не могу запустить этот образ на устройстве Raspberry с сообщением об ошибке: ' standard_init_linux.go: 190: пользовательский процесс exec вызвал «ошибку формата exec». Похоже, что созданный Windows образ подходит только для архитектуры AMD64.

Затем я попытался изменить образы компоновщика и среды выполнения на ARM32, но теперь процесс сборки завершается с ошибкой:

qemu: Unsupported syscall: 389 
qemu: Unsupported syscall: 345 qemu:
uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault The command '/bin/sh -c dotnet restore' returned a
non-zero code: 139

Мой файл Docker:

#FROM microsoft/dotnet:2.2-sdk AS builder
FROM microsoft/dotnet:2.2-sdk-stretch-arm32v7 AS builder
WORKDIR /source

RUN curl -sL https://deb.nodesource.com/setup_10.x |  bash -
RUN apt-get install -y nodejs

COPY *.csproj .
RUN dotnet restore

COPY ./ ./

RUN dotnet publish "./react-app.csproj" --output "./dist" --configuration Release --no-restore

#FROM microsoft/dotnet:2.2-aspnetcore-runtime
FROM microsoft/dotnet:2.2-aspnetcore-runtime-stretch-slim-arm32v7 as runtime
WORKDIR /app
COPY --from=builder /source/dist .
EXPOSE 80
ENTRYPOINT ["dotnet", "react-app.dll"]

Можно ли создать образ для устройства Raspberry из ОС Windows?

Если да, не могли бы вы помочь мне с настройками Docker?

1 Ответ

0 голосов
/ 27 февраля 2019

Я довольно новичок во всем, что касается Docker, но у меня есть пример для запуска Azure Edge Modules на моем RPi, который должен быть такой же концепцией. Для среды сборки я использую microsoft/dotnet:2.1-sdk - это потому, что мой хост - Win10 x86_64 и сгенерированный IL-код в любом случае не зависит от платформы. Но , поскольку конечной платформой является arm32v7, время выполнения dotnet должно быть arm32v7. Так что для выполнения я использую microsoft/dotnet:2.1-runtime-stretch-slim-arm32v7 (или microsoft/dotnet:2.2-aspnetcore-runtime-stretch-slim-arm32v7 в вашем случае).

Попробуйте этот Dockerfile:

FROM microsoft/dotnet:2.2-sdk AS builder
WORKDIR /source

RUN curl -sL https://deb.nodesource.com/setup_10.x |  bash -
RUN apt-get install -y nodejs

COPY *.csproj .
RUN dotnet restore

COPY ./ ./

RUN dotnet publish "./react-app.csproj" --output "./dist" --configuration Release --no-restore

FROM microsoft/dotnet:2.2-aspnetcore-runtime-stretch-slim-arm32v7 as runtime
WORKDIR /app
COPY --from=builder /source/dist .
EXPOSE 80
ENTRYPOINT ["dotnet", "react-app.dll"]
...