簡體   English   中英

在 Windows 主機上通過 docker-compose 混合 Windows 和 Linux 容器

[英]Mixing Windows and Linux containers via docker-compose on a Windows host

我在嘗試通過 docker-compose 在 Windows 主機上混合 Windows 和 Linux 容器時遇到問題,如https://devblogs.microsoft.com/premier-developer/mixing-windows-and-linux-docker-containers-compose-with中所示/

我克隆了文章的原始存儲庫 ( https://github.com/RandyPatterson/DockerComposeMultiPlatform ) 並且已經用新鏈接替換了 Dockerfiles 中每個過時的基礎圖像,您可以在下面看到所有相關文件。 我可以通過首先切換到 Linux 守護程序,為 API 啟動一個容器,然后切換到 Windows 守護程序並為 web 應用程序啟動一個容器來手動運行它。

根據https://stackoverflow.com/a/72260359 , docker-compose 也應該這樣做,包括為各自的平台構建它,當我在 Windows 守護程序上運行docker-compose up -d時,它首先通過拉取 881406186715 的圖像來正常啟動ApiTier Dockerfile 直到第一個RUN行,然后我收到錯誤hcsshim::CreateComputeSystem 186c82040b2e396b4b6e4c4063c2c8f562e855469630b82415e51043f6cb1773: An adapter was not found.

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\Docker文件

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\Docker文件

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2
WORKDIR /inetpub/wwwroot
COPY docker/ .

docker version

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 version

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

Docker 守護進程 json 為 Windows

{
  "experimental": true,
  "features": {
    "buildkit": false
  }
}

Docker 守護進程 json 為 Linux

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": true,
  "features": {
    "buildkit": true
  }
}

先步驟,后細節:

  1. 將 docker 切換為使用 Windows 容器
  2. 在 Docker 引擎中,將 experimental 設置為 true(我看到它在你這邊已經是 true)。
  3. select docker 設置(在常規下)中的“使用 Docker Compose V2”。
  4. 運行docker-compose up -d命令。

你分享的示例回購未能在我這邊構建,但我找到了一個更好的示例,並且它有效(當然有一些模組:))

示例 docker-compose.yml:

version: '3.8'
services:
  nanoserver:
    container_name: nanoserver
    image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-20H2
  sql2017:
    container_name: sql2017
    platform: linux
    mem_limit: 4GB
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_PID=Developer
      - SA_PASSWORD=Mypass1.
    ports:
      - '1433:1433'
    image: mcr.microsoft.com/mssql/server:2017-latest

我使用與您相同的 docker 版本(服務器和客戶端)。 但是,我認為需要 docker-compose 的 v2:

$ docker-compose version
Docker Compose version v2.13.0

確保 select docker 設置中的“使用 Docker Compose V2”。 在此處輸入圖像描述

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM