基于.NET Core 5.0的Docker镜像安装Python3.8 报requirements.txt找不到求助
问题原因
- 构建上下文路径不匹配
Visual Studio自动生成的.NET项目Dockerfile,默认构建上下文为解决方案根目录(对应你本地路径的C:\project\testApp\),而你的requirements.txt存放在解决方案下的testApp子目录中,直接写COPY requirements.txt ./会从上下文根目录查找文件,因此触发找不到文件的报错。 - Python安装脚本存在错误
- 仅安装了
python3未安装python3-pip,后续执行pip命令会直接报错 pip install不存在-y参数,该参数是apt命令的专属参数,不能用于pip- Debian Buster系统默认源中的
python3版本为3.7,不符合你需要的3.8版本要求
- 冗余拷贝冲突
你在base阶段执行了COPY . .,后续final阶段又从publish阶段拷贝编译后的.NET程序文件,会造成文件冗余,甚至可能覆盖运行时所需的正确文件。
解决方案
步骤1:修改Dockerfile内容
完整修正后的Dockerfile如下:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base WORKDIR /app EXPOSE 80 EXPOSE 443 #mycode start - python3.8 install # 安装Python3.8和pip RUN apt-get update -y && \ apt-get install -y software-properties-common && \ add-apt-repository ppa:deadsnakes/ppa -y && \ apt-get update -y && \ apt-get install -y python3.8 python3-pip && \ # 配置python3、pip默认指向3.8版本 update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 && \ update-alternatives --set python3 /usr/bin/python3.8 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # 从构建上下文拷贝requirements.txt,注意路径为相对于根目录的testApp/requirements.txt COPY testApp/requirements.txt ./ RUN python3 -m pip install --upgrade pip && \ python3 -m pip install -r requirements.txt #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"]
步骤2:调整本地文件配置
在Visual Studio中右键点击requirements.txt文件,选择「属性」,修改两个配置:
- 生成操作:改为「内容」
- 复制到输出目录:改为「如果较新则复制」
步骤3:确认构建命令(仅手动构建时需要)
如果是手动执行docker build命令构建,需要确保在解决方案根目录(C:\project\testApp\)下执行,指定Dockerfile路径:
docker build -f testApp/Dockerfile -t your-image-name .
如果直接使用Visual Studio的Docker调试功能,不需要额外调整命令,IDE会自动处理上下文路径。
内容的提问来源于stack exchange,提问作者takeyourcode
相关产品推荐
相关产品推荐

