Установите python 3.8 на основе .net core 5.0 в Docker

Я новичок в использовании докера, и у меня возникла проблема с установкой python в докере на основе .net core 5.0. Я выполнил простые инструкции и успешно применил его на сервере. И я пытаюсь применить его, чтобы создать свой собственный файл докеров в Visual Studio (.net core 5.0)

Моя среда разработки (развертывания) основана на ядре .NET и Python 3.8.

Я использую поддержку докеров, предоставляемую Visual Studio. Если я использую эту опцию, Visual Studio создаст Dockerfile для моего проекта.

Ниже приведен исходный файл докера.

      FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["testApp/testApp.csproj", "testApp/"]
COPY ["Util/Util.csproj", "Util/"]
RUN dotnet restore "testApp/testApp.csproj"
COPY . .
WORKDIR "/src/testApp"
RUN dotnet build "testApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "testApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "testApp.dll"]

И я добавил несколько скриптов для установки python3.8 в Docker. Belows - это скрипт, в который добавлен мой код (см. #Mycode start - end)

      FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

#mycode start - python install
RUN apt-get update -y && apt-get install python3 -y
COPY requirements.txt ./
RUN pip install --upgrade pip && \
    pip install -y -r requirements.txt
COPY . .
#mycode end

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["testApp/testApp.csproj", "testApp/"]
COPY ["Util/Util.csproj", "Util/"]
RUN dotnet restore "testApp/testApp.csproj"
COPY . .
WORKDIR "/src/testApp"
RUN dotnet build "testApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "testApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "testApp.dll"]

При сборке с помощью этого скрипта я увидел ошибку

#8 [base 3/5] COPY requirements.txt ./
#8 sha256:29112b53fcb5ccf9ccc50257780a731276
#8 ОШИБКА: "/requirements.txt" не найден: не найден

Путь к файлу require.txt указан ниже.

      C:\
  project
    testApp
      testApp
        testApp.csproj
        startup.cs
        Dockerfile
        requirements.txt
      Util
        Util.csproj
        Util.cs

Не могли бы вы помочь мне решить эту проблему? и дайте мне знать, в чем проблема.

Спасибо, что прочитали это.

2 ответа

Решение

На основе вашей структуры папок и вашей команды копирования для вашего файла csproj ( COPY ["testApp/testApp.csproj", "testApp/"] ), файл requirements.txt также находится в папке testApp, поэтому ваша команда копирования неверна:

      #mycode start - python install
RUN apt-get update -y && apt-get install python3 -y
COPY ["testApp/requirements.txt", ./]
RUN pip install --upgrade pip && \
    pip install -y -r requirements.txt
COPY . .
#mycode end

Контекст вашей сборки - это не папка testapp.csproj, а на один уровень выше ( C:\project\testApp), и именно поэтому вам нужно использовать относительные пути к файлам, а не только имя файла, как если бы он находился в той же папке, а это не так.

Меня устраивает

      RUN apt-get update \
  && apt-get install -y python3-pip python3-dev \
  && cd /usr/local/bin \
  && ln -s /usr/bin/python3 python \
  && pip3 install --upgrade pip
Другие вопросы по тегам