.NET 8应用Linux容器基础镜像选择及拉取失败问题求助
问题描述
我有一个需运行在Linux容器中的ASP.NET Core 8 Web API,未使用Docker Desktop。当前Dockerfile基础镜像配置如下:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release
执行docker build时出现错误:
Step 1/18 : FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base 8.0: Pulling from dotnet/aspnet no matching manifest for windows/amd64 10.0.20348 in the manifest list entries
已在API项目文件中指定Linux容器,执行docker pull mcr.microsoft.com/dotnet/aspnet:8.0时也出现相同错误。
解决思路
强制拉取Linux架构镜像:绕过当前Docker daemon的默认平台限制,明确指定拉取Linux版本的镜像
- 拉取镜像时执行命令:
docker pull --platform linux/amd64 mcr.microsoft.com/dotnet/aspnet:8.0 - 修改Dockerfile,在FROM指令中添加平台声明:
FROM --platform=linux/amd64 mcr.microsoft.com/dotnet/aspnet:8.0 AS base WORKDIR /app EXPOSE 80 FROM --platform=linux/amd64 mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release
- 拉取镜像时执行命令:
切换Docker daemon到Linux容器模式:错误提示显示当前Docker运行在Windows容器模式,而目标.NET镜像仅提供Linux版本支持
- 执行
docker info查看OSType字段,确认当前运行环境 - 若
OSType为windows,切换到Linux上下文:- 执行
docker context list查看可用上下文 - 切换到Linux对应的上下文(如
desktop-linux):docker context use desktop-linux
- 执行
- 执行
验证WSL2配置(Windows环境下):如果通过WSL2运行Docker,需确保:
- 执行
wsl --list --verbose确认目标发行版为WSL2版本 - Docker daemon安装在WSL发行版内部,而非Windows主机的Docker Engine
- 执行
内容的提问来源于stack exchange,提问作者Alexu
相关产品推荐
相关产品推荐

