Windows主机上使用docker-compose混合Windows与Linux容器时构建阶段报错求助
Windows主机上使用docker-compose混合Windows与Linux容器时构建阶段报错求助
我特别理解你现在遇到的这个困扰——手动切换Docker daemon能分别跑通两个容器,但用docker-compose一键启动就卡在Linux容器的构建环节,这个hcsshim::CreateComputeSystem的适配器错误确实挺棘手的。结合你的配置和操作场景,我整理了几个可能的解决方向,你可以逐一试试:
1. 重置WSL 2网络适配
这个错误大概率和WSL 2的网络适配器异常有关,先试试重置相关服务:
- 打开管理员权限的PowerShell,依次运行:
wsl --shutdown net stop docker net start docker - 重启Docker Desktop后,再执行
docker-compose up -d测试。
2. 统一开启BuildKit支持
看你提供的daemon配置,Windows端关闭了BuildKit,而Linux端开启了。跨平台构建时BuildKit的兼容性更好,建议把Windows daemon的BuildKit也打开:
- 编辑Windows的
daemon.json文件,将"buildkit": false修改为"buildkit": true - 重启Docker Desktop使配置生效
3. 显式指定构建平台参数
虽然你已经在docker-compose.yml里指定了platform: linux,但可以尝试在构建时强制指定平台,确保Linux容器的构建走WSL 2的daemon:
docker-compose build --platform linux/amd64 apitier docker-compose up -d
4. 验证WSL 2后端配置
确保Docker Desktop完全依赖WSL 2运行:
- 打开Docker Desktop设置,确认Use the WSL 2 based engine已勾选
- 进入Resources > WSL Integration,确保你安装的WSL发行版(如Ubuntu)已开启集成
你提供的配置整理(方便核对)
docker-compose.yml
version: '2.4' services: webtier: image: webtier:win platform: windows ports: - 80 build: context: .\WebTier dockerfile: Dockerfile depends_on: - apitier environment: ApiHost: "apitier" apitier: image: apitier:linux platform: linux expose: - 80 build: context: .\ApiTier dockerfile: Dockerfile
ApiTier\Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:2.1 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:2.1 AS build WORKDIR "/src/ApiTier" COPY . . RUN dotnet build "WebApi.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "WebApi.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "WebApi.dll"]
WebTier\Dockerfile
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2 WORKDIR /inetpub/wwwroot COPY docker/ .
Docker版本信息
Client: Cloud integration: v1.0.29 Version: 20.10.21 API version: 1.41 Go version: go1.18.7 Git commit: baeda1f Built: Tue Oct 25 18:08:16 2022 OS/Arch: windows/amd64 Context: default Experimental: true Server: Docker Desktop 4.15.0 (93002) Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.24) Go version: go1.18.7 Git commit: 3056208 Built: Tue Oct 25 18:03:04 2022 OS/Arch: windows/amd64 Experimental: true
docker-compose版本信息
docker-compose version 1.29.2, build 5becea4c docker-py version: 5.0.0 CPython version: 3.9.0 OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020
如果以上方法都无效,你可以先切换到Linux daemon单独构建apitier镜像(docker-compose build apitier),再切回Windows daemon启动整个服务,先验证镜像本身是否正常。
备注:内容来源于stack exchange,提问作者marymk




