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


2 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