Я выполнил следующие действия:
1) Создайте новое базовое веб-приложение ASP.NET (MVC) без поддержки Docker.
2) Создайте две новые папки (одна внутри другой) внутри решения под названием Приложение \ Изображение (Приложение находится на том же уровне, что и папка Контроллеры).
3) Добавьте файл с именем TestImage.png в папку Image.
4) Для успешного доступа к файлу используйте следующий код:
byte[] image = System.IO.File.ReadAllBytes("Application\\Image\\TestImage.png");
Ожидаемое поведение до сих пор; вот проблемный бит:
5) Щелкните правой кнопкой мыши по решению и выберите: Добавить поддержку оркестровки контейнеров / Docker Compose / Linux (целевая ОС)
6) Запустите проект (docker-compose является стартовым проектом). Я получаю сообщение об ошибке: System.IO.IOException: 'Invalid argument'
Я много занимался поиском в Google, и он говорит мне, что мне нужно настроить Dockerfile для копирования изображения в контейнер. Dockerfile в настоящее время выглядит так:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY WebApplication1/WebApplication1.csproj WebApplication1/
RUN dotnet restore WebApplication1/WebApplication1.csproj
COPY . .
WORKDIR /src/WebApplication1
RUN dotnet build WebApplication1.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish WebApplication1.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
Я попытался добавить эту строку (ниже этой строки: COPY WebApplication1/WebApplication1.csproj WebApplication1/
):
COPY WebApplication1/Application/Image/TestImage.png WebApplication1/Application/Image/
Однако я вижу ту же ошибку. Как я могу заставить приложение читать изображение теперь, когда я использую Docker?