How to Fix “No Matching Manifest for Windows/amd64” Error When Running Linux Docker Containers on Windows Server 2016


11 views

When attempting to run Linux containers on Windows Server 2016, you'll encounter the frustrating "no matching manifest for windows/amd64" error. This occurs because Docker defaults to Windows containers, and the platform switching mechanism differs from Docker Desktop's GUI approach.

First, confirm your Docker configuration with:

docker version
docker info

Key indicators you're not in Linux container mode:

  • OSType: windows in docker info
  • Missing LCOW (Linux Containers on Windows) components
  • Windows kernel version instead of LinuxKit kernel

Ensure these are in place:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Install-Module -Name DockerMsftProvider -Force
Install-Package -Name docker -ProviderName DockerMsftProvider -Force

Unlike Docker Desktop, Windows Server requires manual configuration:

Step 1: Configure Docker Daemon

Create or modify daemon.json at C:\ProgramData\docker\config\:

{
    "experimental": true,
    "storage-driver": "lcow",
    "exec-opts": ["isolation=hyperv"]
}

Step 2: Restart Docker Service

Restart-Service docker

Step 3: Pull Linux Images Correctly

Use explicit platform specification:

docker pull --platform linux amd64/ubuntu

Step 4: Run Containers with Proper Isolation

docker run --isolation=hyperv --platform linux -it amd64/ubuntu bash

If you still encounter problems:

Verify LCOW Installation

Get-WindowsOptionalFeature -Online -FeatureName *contain*

Ensure "Containers" and "Microsoft-Hyper-V" are enabled.

Alternative Approach: Using LCOW Directly

For Windows Server 2016 without Docker EE:

docker run --isolation=hyperv 
    -v //./pipe/docker_engine://./pipe/docker_engine 
    -e DOCKER_HOST=npipe:////./pipe/docker_engine 
    linuxkit/lcow

When running Linux containers on Windows Server 2016:

  • Expect 20-30% performance overhead compared to native Linux
  • Disk I/O is particularly impacted due to translation layers
  • Consider dedicated Linux VMs for production workloads

Confirm successful configuration with:

docker run --rm --platform linux alpine uname -a

Should return Linux kernel information if properly configured.


When attempting to run Linux containers on Windows Server 2016, you'll encounter the notorious platform mismatch error:

no matching manifest for windows/amd64 in the manifest list entries

Unlike Docker Desktop for Windows which provides a GUI toggle, Windows Server requires manual configuration to enable Linux Container support through Linux Containers on Windows (LCOW).

Before proceeding, verify your environment meets these requirements:

  • Windows Server 2016 with Containers feature enabled (KB4015217 or later)
  • Hyper-V role installed and running
  • Docker EE version 17.06+ (or experimental build for older versions)
  • Minimum 4GB RAM (8GB recommended)

1. Enable Experimental Features

Edit or create the Docker configuration file at C:\ProgramData\Docker\config\daemon.json:

{
  "experimental": true,
  "storage-driver": "lcow",
  "storage-opts": [
    "lcow.globalmode=true"
  ]
}

2. Configure Platform Switching

Unlike Docker Desktop, Windows Server requires explicit platform selection for each operation:

docker run --platform=linux alpine ls -l

Or set the default platform in your environment:

$env:LCOW_SUPPORTED=1
docker run alpine ls -l

Kernel Version Mismatch

If you see Windows kernel version instead of LinuxKit in docker info, verify:

docker version
docker info

The output should show experimental features enabled and Linux containers available.

Persistent Platform Settings

Add these to your PowerShell profile for automatic configuration:

if ((Get-Service docker).status -eq 'Running') {
  $env:LCOW_SUPPORTED=1
  docker context use default
}

For production environments, consider these optimizations:

{
  "experimental": true,
  "storage-driver": "lcow",
  "storage-opts": [
    "lcow.kirdpath=C:\\lcow",
    "lcow.bootparameters=console=ttyS0"
  ],
  "debug": true
}

Remember to restart the Docker service after configuration changes:

Restart-Service docker

For mixed workloads, you can explicitly specify the platform:

docker run --platform=windows mcr.microsoft.com/windows/servercore:ltsc2016
docker run --platform=linux alpine:latest