Установите 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