You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于Python镜像的Docker容器中安装.NET CLI

解决Docker容器中.NET CLI安装及dotnet命令未识别问题

一、核心问题定位

你遇到的[Errno 2] No such file or directory错误,本质是容器内未安装.NET CLI,导致系统无法识别dotnet命令;同时subprocess.call的调用方式有误,将整个命令串当作单个文件路径处理。

二、在Dockerfile中正确安装.NET CLI

以Python官方镜像(如python:3.10-slim)为例,添加以下步骤完成.NET CLI安装:

1. 安装系统依赖

先部署.NET运行所需的基础依赖:

RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    libc6 \
    libgcc1 \
    libgssapi-krb5-2 \
    libicu72 \
    libssl3 \
    libstdc++6 \
    zlib1g \
    && rm -rf /var/lib/apt/lists/*

2. 安装.NET SDK(适配dotnet test场景)

dotnet test需要完整的SDK支持,以下是.NET 7 SDK的安装步骤(可根据需求更换版本):

# 指定.NET SDK版本
ENV DOTNET_VERSION=7.0.400

# 下载并解压安装SDK
RUN curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$DOTNET_VERSION/dotnet-sdk-$DOTNET_VERSION-linux-x64.tar.gz \
    && mkdir -p /usr/share/dotnet \
    && tar -zxf dotnet.tar.gz -C /usr/share/dotnet \
    && rm dotnet.tar.gz \
    && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet

3. 验证安装(可选)

添加命令确认.NET CLI安装成功:

RUN dotnet --version

三、修正subprocess调用方式

原代码将整个命令作为单个字符串传入,导致系统误判为文件路径。正确写法需拆分命令参数:

import subprocess

# 拆分命令为列表形式(推荐,避免shell注入风险)
command = [
    "dotnet", "test",
    "././student-repos/oefeningen_oop-CoolsBrent-1690206525.848589/01/01_01/test",
    "-l:trx;LogFileName=result.xml",
    "--verbosity=quiet"
]

# 执行命令,check=True可在命令失败时抛出异常
subprocess.call(command, check=True)

若必须使用字符串形式调用,需添加shell=True(不推荐,存在安全风险):

subprocess.call('dotnet test ././student-repos/oefeningen_oop-CoolsBrent-1690206525.848589/01/01_01/test -l:"trx;LogFileName=result.xml" --verbosity="quiet"', shell=True)

四、完整Dockerfile示例

FROM python:3.10-slim

# 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    libc6 \
    libgcc1 \
    libgssapi-krb5-2 \
    libicu72 \
    libssl3 \
    libstdc++6 \
    zlib1g \
    && rm -rf /var/lib/apt/lists/*

# 安装.NET 7 SDK
ENV DOTNET_VERSION=7.0.400
RUN curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$DOTNET_VERSION/dotnet-sdk-$DOTNET_VERSION-linux-x64.tar.gz \
    && mkdir -p /usr/share/dotnet \
    && tar -zxf dotnet.tar.gz -C /usr/share/dotnet \
    && rm dotnet.tar.gz \
    && ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet

# 验证.NET安装
RUN dotnet --version

# 设置工作目录
WORKDIR /app

# 安装Python依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 启动应用(根据你的实际启动命令调整)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

内容的提问来源于stack exchange,提问作者Joren97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:17:36