Как изменить тип платформы хоста на linux/arm с linux/amd в конфигурации Visual Studio 2019?

#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
 

Как изменить целевую платформу хоста?

Шаг к воспроизведению здесь:

  1. Выполнить VS2019
  2. Выберите приложение Blazor Server
  3. Выберите .NET 3.1
  4. Установите флажок Включить Докер
  5. Выберите хост Docker для «Linux»
  6. Выберите Общедоступное хранилище контейнеров Docker.
  7. Выберите «Docker hub».
  8. Введите мое имя пользователя и пароль
  9. Измените целевую среду выполнения на «linux-arm».
  10. строить

Пожалуйста, научите меня, как изменить тип платформы хоста на 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 изменится на следующее.

  1. ОТ mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim-arm64v8 В качестве основы
  2. ОТ mcr.microsoft.com/dotnet/sdk:3.1-buster-arm64v8 КАК построить

Во — вторых, я добавил -r linux-arm64 параметр в dotnet restore , dotnet build , и dotnet publish .

  1. ЗАПУСТИТЕ восстановление dotnet «*.csproj» -r linux-arm64
  2. ЗАПУСТИТЕ сборку dotnet «*.csproj» -r linux-arm64 -Выпуск c-o /приложение/сборка
  3. ЗАПУСТИТЕ публикацию dotnet «*.csproj» -r linux-arm64 -Выпуск c-o /приложение/публикация

Затем, наконец, я выполнил следующую команду, я добился успеха !!!!!!!

docker buildx build -f <Dockerfile path> --platform linux/arm64 -t <dockerhud path> --push .

Внимание, если вы не укажете параметр «-f», запись относительных путей в Dockerfie недопустима.