#docker #arm #blazor
Вопрос:
Я хочу развернуть приложение Blazor в QNAP(TS-230). Итак, я создаю образ Docker в Visual Studio 2019.
QNAP является одним из NAS и является системой ARM. Итак, я изменил файл dockerfile на следующую конфигурацию.
#FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim-arm64v8 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["BlazorApp4/BlazorApp4.csproj", "BlazorApp4/"]
RUN dotnet restore "BlazorApp4/BlazorApp4.csproj"
COPY . .
WORKDIR "/src/BlazorApp4"
RUN dotnet build "BlazorApp4.csproj" -c Release -o /app/build
Затем постройте, я столкнулся со следующим сообщением об ошибке.
error CTC1015: WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
Как изменить целевую платформу хоста?
Шаг к воспроизведению здесь:
- Выполнить VS2019
- Выберите приложение Blazor Server
- Выберите .NET 3.1
- Установите флажок Включить Докер
- Выберите хост Docker для «Linux»
- Выберите Общедоступное хранилище контейнеров Docker.
- Выберите «Docker hub».
- Введите мое имя пользователя и пароль
- Измените целевую среду выполнения на «linux-arm».
- строить
Пожалуйста, научите меня, как изменить тип платформы хоста на linux/arm.
Лучшее пожелание.
Комментарии:
1. Моя среда-Windows 10.
2. Вероятно, вам следует добавить несколько тегов вокруг docker, поскольку ваш вопрос имеет очень мало общего с Blazor.
3. Спасибо вам за ваш ответ. Да, моя цель-развертывание в Linux/arm. Так что, что это за блейзер или нет, не важно. Где я могу добавить тег на VS2019. Я не могу его найти..
4. О! Я понимаю ваши слова! Большое вам спасибо за ваш совет.
Ответ №1:
Я решил это сам. Я использовал «buildx», предоставляемый Docker. Этот инструмент можно создать для указанной платформы --platform
, установив параметр. «buildx» объясняется на следующей странице.
https://docs.docker.com/buildx/working-with-buildx/
А затем я сделал два изменения в Dockerfile. Сначала изображение с использованием среды выполнения/sdk изменится на следующее.
- ОТ mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim-arm64v8 В качестве основы
- ОТ mcr.microsoft.com/dotnet/sdk:3.1-buster-arm64v8 КАК построить
Во — вторых, я добавил -r linux-arm64
параметр в dotnet restore
, dotnet build
, и dotnet publish
.
- ЗАПУСТИТЕ восстановление dotnet «*.csproj» -r linux-arm64
- ЗАПУСТИТЕ сборку dotnet «*.csproj» -r linux-arm64 -Выпуск c-o /приложение/сборка
- ЗАПУСТИТЕ публикацию dotnet «*.csproj» -r linux-arm64 -Выпуск c-o /приложение/публикация
Затем, наконец, я выполнил следующую команду, я добился успеха !!!!!!!
docker buildx build -f <Dockerfile path> --platform linux/arm64 -t <dockerhud path> --push .
Внимание, если вы не укажете параметр «-f», запись относительных путей в Dockerfie недопустима.