Experience Sitecore ! | SitecoreAI Containers Without Docker Desktop

Experience Sitecore !

More than 300 articles about the best DXP by Martin Miles

SitecoreAI Containers Without Docker Desktop

If you have ever tried to run SitecoreAI containers locally and hit the Docker Desktop licensing wall, you are not alone. Docker Desktop requires a paid subscription for organizations with more than 250 employees or an annual revenue of more than $10 million. That forces a question: can you run the XM Cloud local container stack without Docker Desktop at all?

The short answer is yes, but the full picture is more nuanced. I went through Sitecore's official documentation, the starter kit repositories, and every community walkthrough I could find to map out what is actually supported, what is community-derived, and where the gaps are. 

The approach is to install and run the standalone Docker Engine directly as a Windows service, then use Docker Compose from the CLI plugin path that modern Docker tooling expects. This is useful when Docker Desktop is unavailable, undesired, restricted by licensing, or unstable in a local Sitecore development environment.

1. Already got Docker Desktop? Remove it first

If Docker Desktop is already installed, stop it first. If you are replacing it entirely, uninstall Docker Desktop before installing the standalone Docker Engine.

You may also want to clean old Docker resources before continuing, especially if your Windows container layers have grown very large.

A related cleanup approach from Vikrant Punwatkar’s Docker cleanup guidance uses a longer shutdown timeout for Docker daemon cleanup:

dockerd -D --shutdown-timeout 900

This can help when Docker needs more time to clean large Windows container layers.

2. Enable required Windows features

If you used Docker Desktop previously, you'll likely have the following features available; if not, run PowerShell as Administrator:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName containers -All

Restart Windows if prompted.

Both Hyper-V and Containers are commonly required for Windows container development.

3. Download standalone Docker Engine for Windows

Run PowerShell as Administrator:

curl.exe -o docker.zip -LO https://download.docker.com/win/static/stable/x86_64/docker-20.10.13.zip

Extract it:

Expand-Archive docker.zip -DestinationPath C:\

After extraction, Docker binaries should be available under:

C:\docker

4. Add Docker to PATH

Run this as a single line in Administrator PowerShell:

[Environment]::SetEnvironmentVariable("Path", "$([Environment]::GetEnvironmentVariable('Path', 'Machine'));C:\docker", [System.EnvironmentVariableTarget]::Machine)

Then refresh the current shell session path:

$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine")

Close and reopen PowerShell if docker is still not recognized.

5. Register Docker daemon as a Windows service

Register Docker Engine as a Windows service:

dockerd --register-service

Start the Docker service:

Start-Service docker

Verify Docker is running:

docker version
docker info

Test a basic container run:

docker run hello-world

6. Install Docker Compose v2 CLI plugin

Create the Docker CLI plugin directory:

New-Item -ItemType Directory -Force -Path "C:\Program Files\Docker\cli-plugins"

Download Docker Compose v2:

curl.exe -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-windows-x86_64.exe" -o "C:\Program Files\Docker\cli-plugins\docker-compose.exe"

We also need adding it to PATH by using the below PowerShell in admin mode;

$d='C:\Program Files\Docker\cli-plugins'; $m=((([Environment]::GetEnvironmentVariable('Path','Machine') -split ';') | ? { $_ -and $_  -ne "$d\docker-compose.exe" -and $_ -ne $d } | select -Unique) + $d) -join ';';  [Environment]::SetEnvironmentVariable('Path',$m,'Machine'); $env:Path=$m

Verify Compose:

docker compose version
docker-compose version

The important path is:

C:\Program Files\Docker\cli-plugins\docker-compose.exe

This path allows docker compose to work as a Docker CLI plugin.

7. Configure Docker daemon if needed

Create or edit this file:

C:\ProgramData\docker\config\daemon.json

A safe baseline configuration for many Sitecore Windows container setups is:

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

Restart Docker after changing daemon configuration:

Restart-Service docker

For Sitecore projects, experimental: true may be needed when the solution mixes Windows and Linux containers. This is common in some older Sitecore container setups.

8. Stop local IIS and Solr before starting Sitecore containers

Local IIS or Solr services can conflict with Sitecore container ports.

Stop IIS:

iisreset /stop

If you have a local Solr Windows service installed, stop it from services.msc, or stop it by service name if you know it:

Stop-Service -Name "solr-*"

If that wildcard does not match your service, list services first:

Get-Service *solr*

9. Run your Sitecore project

From the project root, the command depends on the project structure.

For many SitecoreAI local container setups that may look as below.

If you have not run it ever before, you must initialize it first:

cd .\local-containers\scripts
.\init.ps1 -InitEnv -LicenseXmlPath C:\Projects\license.xml -AdminPassword b -baseOs ltsc2022

Then just run the main script:

.\local-containers\scripts\up.ps1

Now sit comfortable, grab your coffee and wait until it pulls all the required images and runs:

Typical Sitecore local container startup scripts may do several things:

  • Pull or update images
  • Build custom images
  • Configure hosts file entries
  • Start Docker Compose services
  • Start the CM container
  • Install Sitecore CLI plugins
  • Populate Solr schemas
  • Rebuild indexes
  • Push serialized items
At the end, you will see SitecoreAI authentication screen in a browser:

Troubleshooting checklist

Before going into specific issues, I just want to advise you to check if you're running scripts in the admin mode - that is especially crucial on the corporate and enterprise restricted machines.

Docker service does not start

Check the service:

Get-Service docker
Start-Service docker

Check Docker info:

docker info

If Docker fails with references to panic.log, try removing this file and starting Docker again:

Remove-Item "C:\ProgramData\docker\panic.log" -Force
Start-Service docker

Docker command is not recognized

Confirm Docker is in the machine PATH:

[Environment]::GetEnvironmentVariable("Path", "Machine")

Confirm the binary exists:

dir C:\docker\docker.exe

Refresh current PowerShell PATH:

$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine")

Docker Compose is not recognized

Confirm the plugin exists:

dir "C:\Program Files\Docker\cli-plugins\docker-compose.exe"

Verify Compose:

docker compose version

Ports are already in use

Check common Sitecore container ports:

netstat -ano | findstr ":443"
netstat -ano | findstr ":8079"
netstat -ano | findstr ":8984"
netstat -ano | findstr ":14330"

If IIS is using port 443:

iisreset /stop

Windows container layers consume too much disk space

Windows container layers can accumulate under Docker’s storage folders, especially after repeated Sitecore container rebuilds.

Common cleanup commands:

docker system df
docker system prune -a

For stubborn Windows layer cleanup, a longer Docker daemon shutdown timeout may help:

dockerd -D --shutdown-timeout 900

Use caution when manually deleting Docker layer folders. Prefer Docker’s own cleanup commands first.

Loading