<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Enlighten with Amit</title><link>https://www.amitk.net/tags/sitecore10-4/</link><description>Expert insights from a Solution Architect on enterprise digital strategy, microservices architecture, and modern headless solutions (Sitecore XM Cloud, Next.js). Focused on driving business impact through scalable technology.</description><image><url>https://www.amitk.net/images/amit-kumar.jpeg</url><title>Enlighten with Amit</title><link>https://www.amitk.net/</link></image><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>amit@amitk.net (Amit Kumar)</managingEditor><webMaster>amit@amitk.net (Amit Kumar)</webMaster><lastBuildDate>Sun, 20 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.amitk.net/tags/sitecore10-4/index.xml" rel="self" type="application/rss+xml"/><item><title>Fixing Sitecore Docker on Windows 11 with LTSC2022</title><link>https://www.amitk.net/blog/sitecore-docker-windows-11-ltsc2022/</link><pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate><author>amit@amitk.net (Amit Kumar)</author><guid>https://www.amitk.net/blog/sitecore-docker-windows-11-ltsc2022/</guid><media:content url="https://www.amitk.net/images/fixing-sitecore-docker-windows-11-ltsc2022/Sitecore-Docker-Windows-11-LTSC2022.gif" medium="image" type="image/gif"/><description>
Learn how to migrate Sitecore Docker images to LTSC2022, enable Windows containers, and troubleshoot Docker Desktop build failures on Windows 11.</description><content:encoded><![CDATA[







<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-introduction" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">📊 Introduction</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Moving a Sitecore 10.4 local container environment from older Windows Server 2019 base images to <strong>LTSC2022</strong> is more than just swapping <code>1809</code> for <code>ltsc2022</code> in your image tags.</p>
<p>Windows 11 manages container isolation and system processes differently than earlier releases. If your Docker daemon is set to the wrong OS, if base images mismatch across your services, or if build stages run out of sequence, local builds will crash before containers even initialize.</p>
<p>This guide turns a real troubleshooting session into a repeatable, step-by-step migration blueprint. We will cover the quick system checks to perform first, how to fix Docker Desktop permissions, and how to centralize your environment variables so future updates take only minutes.</p>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-why-sitecore-docker-builds-fail-on-windows-11" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">⚠️ Why Sitecore Docker Builds Fail on Windows 11</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Sitecore 10.4 instances rely on <strong>Windows containers</strong>. When you upgrade a development machine to Windows 11, older project configurations can trigger several hidden build issues:</p>
<ul>
<li><span class="dark:text-gray-300 font-semibold gradient-text">Outdated Nano Server Images:</span> Older images hardcoded to <code>1809</code> that fail under Windows 11 container isolation.</li>
<li><span class="dark:text-gray-300 font-semibold gradient-text-solar-flare">Mismatched Image Families:</span> Mixing older <code>ltsc2019</code> tags with newer <code>ltsc2022</code> tags across child services.</li>
<li><span class="dark:text-gray-300 font-semibold gradient-text-aqua">Wrong Daemon Mode:</span> Docker Desktop running its default Linux daemon instead of Windows containers.</li>
<li><span class="dark:text-gray-300 font-semibold gradient-text-vital-ocean">Missing Background Service:</span> Docker Desktop installed per-user (<code>%LOCALAPPDATA%</code>), missing the privileged service required by Windows containers.</li>
<li><span class="dark:text-gray-300 font-semibold gradient-text-cyber-cobalt">Out-of-Order Builds:</span> Downstream services trying to build before local base images exist.</li>
<li><span class="dark:text-gray-300 font-semibold gradient-text-hyper-violet">Accidental Variable Expansion:</span> Database passwords containing <code>$</code> signs being parsed as missing Compose variables.</li>
</ul>
<div class="callout warning">
    <div class="callout-head"><svg height=1.2em class="hx:inline-block hx:align-middle" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73.0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898.0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"></path></svg><p>BuildKit Error Hunting</p>
    </div>
    <div class="callout-body">
        <p><span class="dark:text-gray-300 font-semibold gradient-text-electric-matrix">Because Docker BuildKit builds targets in parallel, multiple errors often show up at the same time. Always scroll up to the very first error in your terminal. Messages such as &lsquo;context canceled&rsquo; are simply secondary side effects of that initial failure.</span></p>
    </div>
</div>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-step-1-check-the-docker-daemon-before-editing-code" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">🔍 Step 1: Check the Docker Daemon Before Editing Code</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Before changing your Dockerfiles or configuration, verify that Docker Desktop is actually set up to run Windows containers.</p>
<p>Run this command in PowerShell:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>docker info | <span style="color:#8be9fd;font-style:italic">Select-String</span> <span style="color:#f1fa8c">&#34;OSType&#34;</span></span></span></code></pre></div>
<p>You need to see:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>OSType: windows</span></span></code></pre></div>
<p>If the output is <code>OSType: linux</code>, Docker Desktop is running its Linux daemon. Setting <code>platform: windows/amd64</code> in your <code>docker-compose.yml</code> does <strong>not</strong> change the daemon engine for you. Trying to build a Windows image on a Linux daemon produces misleading errors:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>unable to find user ContainerUser: no matching entries in passwd file</span></span></code></pre></div>
<p>Next, confirm your exact host OS build version:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">Get-ComputerInfo</span> | <span style="color:#8be9fd;font-style:italic">Select-Object</span> WindowsProductName, WindowsVersion, OsBuildNumber</span></span></code></pre></div>
<p>Windows 11 supports Windows Server 2022 containers natively, but the Docker Desktop daemon must be in Windows mode before running builds.</p>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-step-2-install-docker-desktop-the-right-way" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">📦 Step 2: Install Docker Desktop the Right Way</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Docker Desktop has two installation modes on Windows, and the difference is critical:</p>
<ul>
<li><span class="dark:text-gray-300 font-semibold gradient-text-vital-ocean">Per-User Installation:</span> Installs in <code>%LOCALAPPDATA%\Programs\DockerDesktop</code>. It supports Linux containers only.</li>
<li><span class="dark:text-gray-300 font-semibold gradient-text-emerald-prism">All-Users Installation:</span> Installs in <code>C:\Program Files\Docker\Docker</code>. It installs the privileged system helper and fully supports Windows containers.</li>
</ul>
<p>For an x64 Windows 11 workstation running Sitecore, download the <strong>x86_64 installer</strong> and run it with administrator permissions for <strong>all users</strong>. Do not choose the ARM build unless you are on an ARM64 machine.</p>
<p>The all-users install registers <span class="rounded-lg inlinehighlight shadow transition dark:bg-gray-100 dark:text-gray-600 bg-primary text-white">com.docker.service</span>, which is required for Windows containers and Hyper-V isolation. Verify that it is running:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">Get-Service</span> com.docker.service</span></span></code></pre></div>
<p>If another administrator set up your computer, add your account to the local <code>docker-users</code> group:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>net localgroup <span style="color:#8be9fd;font-style:italic">docker-users</span> <span style="color:#f1fa8c">&#34;DOMAIN\username&#34;</span> /add</span></span></code></pre></div>
<div class="callout info">
    <div class="callout-head"><svg height=1.2em class="hx:inline-block hx:align-middle" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"><path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75.0 011.063.852l-.708 2.836a.75.75.0 001.063.853l.041-.021M21 12A9 9 0 113 12a9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z"></path></svg><p>Session Token Refresh</p>
    </div>
    <div class="callout-body">
        <p><span class="dark:text-gray-300 font-semibold gradient-text-cyber-cobalt">Sign out and sign back in after changing group membership so Windows creates a new security token for your user account.</span></p>
    </div>
</div>
<p>Confirm your membership:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>whoami /groups | <span style="color:#8be9fd;font-style:italic">Select-String</span> <span style="color:#f1fa8c">&#34;docker-users&#34;</span></span></span></code></pre></div>
<p>If you are running Docker inside a virtual machine (VM) or virtual desktop infrastructure (VDI), make sure <strong>nested virtualization</strong> is enabled in the hypervisor host settings. Enabling Hyper-V inside the guest OS alone will not work if the host hypervisor blocks virtualization extensions.</p>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-step-3-align-the-solution-with-ltsc2022" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">⚙️ Step 3: Align the Solution with LTSC2022</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Instead of scattering hardcoded image tags across multiple Dockerfiles, centralize your image tags inside your <code>.env</code> file:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-c3" data-lang="c3"><span style="display:flex;"><span><span style="color:#50fa7b">SITECORE_VERSION</span><span style="color:#ff79c6">=</span><span style="color:#bd93f9">10</span>.<span style="color:#bd93f9">4</span>.<span style="color:#bd93f9">1</span><span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">EXTERNAL_IMAGE_TAG_SUFFIX</span><span style="color:#ff79c6">=</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">TRAEFIK_IMAGE</span><span style="color:#ff79c6">=</span>traefik:v3.<span style="color:#bd93f9">6</span>.<span style="color:#bd93f9">4</span><span style="color:#ff79c6">-</span>windowsservercore<span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">NODEJS_PARENT_IMAGE</span><span style="color:#ff79c6">=</span>mcr.microsoft.com<span style="color:#ff79c6">/</span>windows<span style="color:#ff79c6">/</span>nanoserver:ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">ARTIFACTS_IMAGE</span><span style="color:#ff79c6">=</span>mcr.microsoft.com<span style="color:#ff79c6">/</span>windows<span style="color:#ff79c6">/</span>nanoserver:ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">WINDOWS_CONTAINER_PLATFORM</span><span style="color:#ff79c6">=</span>windows<span style="color:#ff79c6">/</span>amd64
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">NODEJS_VERSION</span><span style="color:#ff79c6">=</span><span style="color:#bd93f9">24</span>.<span style="color:#bd93f9">2</span>.<span style="color:#bd93f9">0</span>
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">TRAEFIK_ISOLATION</span><span style="color:#ff79c6">=</span>hyperv
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># <span style="color:#50fa7b">Othe</span> required changes <span style="color:#ff79c6">for</span> <span style="color:#50fa7b">Sitecore</span> <span style="color:#50fa7b">LTSC2022</span> images
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">TOOLS_IMAGE</span><span style="color:#ff79c6">=</span>scr.sitecore.com<span style="color:#ff79c6">/</span>tools<span style="color:#ff79c6">/</span>sitecore<span style="color:#ff79c6">-</span>docker<span style="color:#ff79c6">-</span>tools<span style="color:#ff79c6">-</span>assets:<span style="color:#bd93f9">10</span>.<span style="color:#bd93f9">2</span>.<span style="color:#bd93f9">0</span><span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">MANAGEMENT_SERVICES_IMAGE</span><span style="color:#ff79c6">=</span>scr.sitecore.com<span style="color:#ff79c6">/</span>sxp<span style="color:#ff79c6">/</span>modules<span style="color:#ff79c6">/</span>sitecore<span style="color:#ff79c6">-</span>management<span style="color:#ff79c6">-</span>services<span style="color:#ff79c6">-</span>xm1<span style="color:#ff79c6">-</span>assets:<span style="color:#bd93f9">5</span>.<span style="color:#bd93f9">2</span>.<span style="color:#bd93f9">113</span><span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">HEADLESS_SERVICES_IMAGE</span><span style="color:#ff79c6">=</span>scr.sitecore.com<span style="color:#ff79c6">/</span>sxp<span style="color:#ff79c6">/</span>modules<span style="color:#ff79c6">/</span>sitecore<span style="color:#ff79c6">-</span>headless<span style="color:#ff79c6">-</span>services<span style="color:#ff79c6">-</span>xm1<span style="color:#ff79c6">-</span>assets:<span style="color:#bd93f9">22</span>.<span style="color:#bd93f9">0</span>.<span style="color:#bd93f9">7</span><span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span># <span style="color:#50fa7b">Sitecore</span> <span style="color:#50fa7b">SXA</span> and <span style="color:#50fa7b">SPE</span> versions.
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">SPE_VERSION</span><span style="color:#ff79c6">=</span><span style="color:#bd93f9">7</span>.<span style="color:#bd93f9">0</span><span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">SXA_VERSION</span><span style="color:#ff79c6">=</span><span style="color:#bd93f9">10</span>.<span style="color:#bd93f9">4</span>.<span style="color:#bd93f9">0</span><span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">TOOLS_VERSION</span><span style="color:#ff79c6">=</span><span style="color:#bd93f9">10</span>.<span style="color:#bd93f9">4</span>.<span style="color:#bd93f9">0</span><span style="color:#ff79c6">-</span>ltsc2022
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">SITECORE_TOOLS_REGISTRY</span><span style="color:#ff79c6">=</span>scr.sitecore.com<span style="color:#ff79c6">/</span>tools<span style="color:#ff79c6">/</span>
</span></span><span style="display:flex;"><span># <span style="color:#ff79c6">--</span> <span style="color:#50fa7b">Headless</span> <span style="color:#50fa7b">SXA</span> <span style="color:#ff79c6">--</span> :: <span style="color:#50fa7b">End</span> :: <span style="color:#ff79c6">---</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#50fa7b">SITECORE_ID_VERSION</span><span style="color:#ff79c6">=</span><span style="color:#bd93f9">8</span>.<span style="color:#bd93f9">0</span><span style="color:#ff79c6">-</span>ltsc2022</span></span></code></pre></div>
<p>Pass those values cleanly through <code>docker-compose.yml</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">services</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">traefik</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">isolation</span>: ${TRAEFIK_ISOLATION}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">image</span>: ${TRAEFIK_IMAGE}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">id</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">isolation</span>: ${ISOLATION}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">image</span>: ${SITECORE_DOCKER_REGISTRY}sitecore-identity:${SITECORE_ID_VERSION}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">environment</span>:
</span></span><span style="display:flex;"><span>     <span style="color:#ff79c6">Sitecore_Sitecore__IdentityServer__SitecoreMemberShipOptions__ConnectionString</span>: Data Source=${SQL_SERVER};Initial Catalog=${SQL_DATABASE_PREFIX}.Core;User ID=${SQL_SA_LOGIN};Password=${SQL_SA_PASSWORD};Encrypt=true;TrustServerCertificate=true;
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">labels</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#6272a4"># ADD THIS EXACT LINE BELOW FOR TRAEFIK V3:</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;traefik.http.services.id.loadbalancer.server.port=80&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#ff79c6">cd</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">labels</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#6272a4"># ADD THIS EXACT LINE BELOW FOR TRAEFIK V3:</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;traefik.http.services.cd.loadbalancer.server.port=80&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#ff79c6">cm</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">labels</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#6272a4"># ADD THIS EXACT LINE BELOW FOR TRAEFIK V3:</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;traefik.http.services.cm.loadbalancer.server.port=80&#34;</span>  </span></span></code></pre></div>
<p>Update for the <code>docker-compose-override.yml</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">services</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">nodejs</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">isolation</span>: ${SERVICE_ISOLATION}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">build</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">context</span>: ./docker/build/nodejs
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">args</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">PARENT_IMAGE</span>: ${NODEJS_PARENT_IMAGE}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">solution</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">build</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">context</span>: ./
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">args</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">ARTIFACTS_IMAGE</span>: ${ARTIFACTS_IMAGE}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">rendering</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">labels</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#6272a4"># ADD THIS EXACT LINE BELOW FOR TRAEFIK V3:</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f1fa8c">&#34;traefik.http.services.rendering-nextjs.loadbalancer.server.port=3000&#34;</span>
</span></span><span style="display:flex;"><span>  <span style="color:#6272a4"># Mount the Traefik configuration and certs.</span>
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">traefik</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">mssql</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">mssql-init</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">solr</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">solr-init</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">id</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">image</span>: ${REGISTRY}${COMPOSE_PROJECT_NAME}-id8:${VERSION:-latest}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">build</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">context</span>: ./docker/build/id
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">args</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">PARENT_IMAGE</span>: ${SITECORE_DOCKER_REGISTRY}sitecore-identity:${SITECORE_ID_VERSION}
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">cd</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">image</span>: ${REGISTRY}${COMPOSE_PROJECT_NAME}-xm1-cd:${VERSION:-latest}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">build</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">context</span>: ./docker/build/cd
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">args</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">TOOLS_IMAGE</span>: ${SITECORE_TOOLS_REGISTRY}sitecore-docker-tools-assets:${TOOLS_VERSION}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">depends_on</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">solution</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">condition</span>: service_started
</span></span><span style="display:flex;"><span> <span style="color:#ff79c6">cm</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">platform</span>: ${WINDOWS_CONTAINER_PLATFORM}
</span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">build</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">context</span>: ./docker/build/cm
</span></span><span style="display:flex;"><span>      <span style="color:#ff79c6">args</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">TOOLS_IMAGE</span>: ${SITECORE_TOOLS_REGISTRY}sitecore-docker-tools-assets:${TOOLS_VERSION}</span></span></code></pre></div>
<p>You can also enforce required variables directly in Compose. This fails early with a clear warning instead of passing an empty image string:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#ff79c6">ARTIFACTS_IMAGE</span>: ${ARTIFACTS_IMAGE:?ARTIFACTS_IMAGE is required}</span></span></code></pre></div>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h3 id="review-every-multi-stage-dockerfile" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">Review Every Multi-Stage Dockerfile</h3>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Multi-stage builds can easily hide outdated base tags. Declare any build arguments used in <code>FROM</code> statements <strong>before</strong> the first stage:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-dockerfile" data-lang="dockerfile"><span style="display:flex;"><span><span style="color:#ff79c6">ARG</span> BUILD_IMAGE
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">ARG</span> ARTIFACTS_IMAGE
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">FROM</span> <span style="color:#f1fa8c">${BUILD_IMAGE</span><span style="color:#ff79c6">}</span> AS builder
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># Solution compile steps</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">FROM</span> <span style="color:#f1fa8c">${ARTIFACTS_IMAGE</span><span style="color:#ff79c6">}</span>
</span></span><span style="display:flex;"><span><span style="color:#ff79c6">COPY</span> --from<span style="color:#ff79c6">=</span>builder /build/artifacts /artifacts</span></span></code></pre></div>
<p>An <code>ARG</code> declared inside one stage is not available to later <code>FROM</code> statements. If an argument is missing or out of scope, BuildKit will throw an error:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>base name (${ARTIFACTS_IMAGE}) should not be blank</span></span></code></pre></div>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h3 id="upgrade-components-thoughtfully" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">Upgrade Components Thoughtfully</h3>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Not every image should be upgraded at the same time:</p>
<ul>
<li><strong>Nano Server:</strong> Update older <code>1809</code> tags to <code>ltsc2022</code> where your tools support it.</li>
<li><strong>.NET Framework SDK:</strong> Review this separately. If your build uses <code>4.8-windowsservercore-ltsc2019</code>, make sure your custom build scripts compile cleanly under LTSC2022 before swapping tags.</li>
<li><strong>Reverse Proxies (Traefik):</strong> Moving from Traefik v2 to v3 is a major version upgrade with breaking configuration changes. Do not bundle it with an OS migration unless necessary.</li>
<li><strong>Node.js:</strong> Verify that your front-end rendering packages and plugins work with newer Node versions before upgrading.</li>
</ul>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-step-4-validate-variable-resolution-first" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">🧪 Step 4: Validate Variable Resolution First</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Before triggering a lengthy build, verify how Docker Compose interprets your variables:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>docker compose config --environment</span></span></code></pre></div>
<p>Then check the merged Compose configuration:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>docker compose `
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.yml `
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.override.xm1.yml `
</span></span><span style="display:flex;"><span>  config</span></span></code></pre></div>
<p>This step highlights invalid YAML formatting, missing variables, or broken paths in seconds.</p>
<div class="callout warning">
    <div class="callout-head"><svg height=1.2em class="hx:inline-block hx:align-middle" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73.0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898.0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"></path></svg><p>Handling Dollar Signs in Passwords</p>
    </div>
    <div class="callout-body">
        <p><span class="dark:text-gray-300 font-semibold gradient-text-solar-flare">If you see a warning like &lsquo;The &ldquo;G&rdquo; variable is not set&rsquo;, check your passwords or secret tokens. Docker Compose treats $G as a variable. Escape dollar signs by doubling them ($$) in your configuration files or store secrets safely in your .env file.</span></p>
    </div>
</div>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-step-5-build-local-dependency-images-first" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">🏗️ Step 5: Build Local Dependency Images First</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>Some Dockerfiles depend on custom local images created earlier in your solution. For example, your rendering container may rely on your custom Node.js image, while your Content Management (CM) container copies files from your local solution build.</p>
<p>If Docker Compose builds services out of order, it may try to pull your local image name (like <code>myproject-solution:latest</code>) from Docker Hub:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>pull access denied for myproject-solution, repository does not exist</span></span></code></pre></div>
<p>To prevent this, build your foundation dependency images first:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#6272a4"># Step 1: Build local base and asset images</span>
</span></span><span style="display:flex;"><span>docker compose `
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.yml `
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.override.xm1.yml `
</span></span><span style="display:flex;"><span>  build nodejs solution
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># Step 2: Build the remaining services</span>
</span></span><span style="display:flex;"><span>docker compose `
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.yml `
</span></span><span style="display:flex;"><span>  <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.override.xm1.yml `
</span></span><span style="display:flex;"><span>  build</span></span></code></pre></div>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-common-errors-solutions" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">🛠️ Common Errors &amp; Solutions</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>



<div class="table-wrapper">
<table class="style-table"><thead>
        <tr><th>Error or Warning</th><th>Likely Cause</th><th>First Check</th></tr>
      </thead><tbody><tr><td><code>no match for platform in manifest</code></td><td>Wrong daemon OS, bad image tag, or platform mismatch</td><td>Run <code>docker info</code> and inspect the exact image tag</td></tr><tr><td><code>unable to find user ContainerUser</code></td><td>Windows image running against a Linux daemon</td><td>Confirm <code>OSType: windows</code> before editing the Dockerfile</td></tr><tr><td><code>base name (...) should not be blank</code></td><td>Missing build argument or out-of-scope Dockerfile <code>ARG</code></td><td>Run <code>docker compose config</code>; declare <code>ARG</code> before the first <code>FROM</code></td></tr><tr><td><code>pull access denied</code> for a local image</td><td>Dependent image was not built locally first</td><td>Build base service images (<code>solution</code>, <code>nodejs</code>) first</td></tr><tr><td><code>com.docker.service</code> is missing</td><td>Docker Desktop was installed per-user</td><td>Reinstall Docker Desktop with admin rights for all users</td></tr><tr><td>User not in <code>docker-users</code></td><td>Missing local group rights or stale sign-in token</td><td>Run <code>net localgroup docker-users</code>, then sign out and back in</td></tr><tr><td><code>context canceled</code></td><td>A different parallel build step failed first</td><td>Find the earliest non-cancellation error in console output</td></tr><tr><td>Compose says variable is unset</td><td>A <code>$</code> in a password was treated as variable interpolation</td><td>Run <code>docker compose config --environment</code> and escape <code>$</code> with <code>$$</code></td></tr></tbody>
  
</table>
</div>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-safe-validation-checklist" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">📋 Safe Validation Checklist</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>


<p class="font-semibold text-xl text-example-color dark:text-gray-300">
Run these checks in order whenever setting up or troubleshooting a machine:
</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span><span style="color:#6272a4"># 1. Confirm host OS and daemon mode</span>
</span></span><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">Get-ComputerInfo</span> | <span style="color:#8be9fd;font-style:italic">Select-Object</span> WindowsProductName, WindowsVersion, OsBuildNumber
</span></span><span style="display:flex;"><span>docker info | <span style="color:#8be9fd;font-style:italic">Select-String</span> <span style="color:#f1fa8c">&#34;OSType&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 2. Verify Docker service and local permissions</span>
</span></span><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">Get-Service</span> com.docker.service
</span></span><span style="display:flex;"><span>net localgroup <span style="color:#8be9fd;font-style:italic">docker-users</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 3. Resolve Compose variables and validate syntax</span>
</span></span><span style="display:flex;"><span>docker compose config --environment
</span></span><span style="display:flex;"><span>docker compose <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.yml <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.override.xm1.yml config --quiet
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 4. Confirm LTSC2022 variables are set</span>
</span></span><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">Get-Content</span> .env | <span style="color:#8be9fd;font-style:italic">Select-String</span> <span style="color:#f1fa8c">&#34;SITECORE_VERSION|EXTERNAL_IMAGE_TAG_SUFFIX|NODEJS_PARENT_IMAGE|ARTIFACTS_IMAGE&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 5. Build base dependency images before the full topology</span>
</span></span><span style="display:flex;"><span>docker compose <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.yml <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.override.xm1.yml build nodejs solution
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6272a4"># 6. Build and start the environment</span>
</span></span><span style="display:flex;"><span>docker compose <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.yml <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.override.xm1.yml build
</span></span><span style="display:flex;"><span>docker compose <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.yml <span style="color:#ff79c6">-f</span> .\<span style="color:#8be9fd;font-style:italic">docker-compose</span>.override.xm1.yml up -d</span></span></code></pre></div>
<div class="callout warning">
    <div class="callout-head"><svg height=1.2em class="hx:inline-block hx:align-middle" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="22" height="22"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73.0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898.0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"></path></svg><p>Avoid Unnecessary Pruning</p>
    </div>
    <div class="callout-body">
        <p><span class="dark:text-gray-300 font-semibold gradient-text-hyper-violet">Avoid running &lsquo;docker system prune &ndash;all &ndash;volumes&rsquo; as a routine diagnostic step. It wipes all cached layers, downloaded images, and database volumes across all your local projects.</span></p>
    </div>
</div>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-frequently-asked-questions-faqs" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">💬 Frequently Asked Questions (FAQs)</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<br/>


          
          
          

          <div class="not-prose accordion-group " data-accordion-mode="single"
            data-first-open="false">
            



  
  
  
  
  

  
  

  <div class="accordion-item" data-open="">
    <h3 class="m-0"><button type="button" class="accordion-header" data-accordion-header aria-expanded="false"><span
      class="accordion-title font-display text-xl md:text-2xl font-bold gradient-text-electric-matrix">Can I run Sitecore Windows containers and Linux containers at the same time in Docker Desktop?</span><svg class="accordion-icon"
      viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path fill="currentColor"
        d="M505.755,123.592c-8.341-8.341-21.824-8.341-30.165,0L256.005,343.176L36.421,123.592c-8.341-8.341-21.824-8.341-30.165,0 s-8.341,21.824,0,30.165l234.667,234.667c4.16,4.16,9.621,6.251,15.083,6.251c5.462,0,10.923-2.091,15.083-6.251l234.667-234.667 C514.096,145.416,514.096,131.933,505.755,123.592z">
      </path>
    </svg></button></h3>
    
    <div class="accordion-panel">
      <div>
        <div class="accordion-body pb-4 pr-8 text-base md:text-lg leading-relaxed text-gray-700 dark:text-gray-300">
          No. Docker Desktop runs either the Linux daemon or the Windows daemon at any given time. Sitecore XM/XP requires the Windows daemon. If you need Linux containers alongside it, run them on a separate Linux VM or via WSL2 on another machine.
        </div>
      </div>
    </div>
  </div>



  
  
  
  
  

  
  

  <div class="accordion-item" data-open="">
    <h3 class="m-0"><button type="button" class="accordion-header" data-accordion-header aria-expanded="false"><span
      class="accordion-title font-display text-xl md:text-2xl font-bold gradient-text-hyper-violet">Why does Windows 11 require LTSC2022 base images for Sitecore?</span><svg class="accordion-icon"
      viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path fill="currentColor"
        d="M505.755,123.592c-8.341-8.341-21.824-8.341-30.165,0L256.005,343.176L36.421,123.592c-8.341-8.341-21.824-8.341-30.165,0 s-8.341,21.824,0,30.165l234.667,234.667c4.16,4.16,9.621,6.251,15.083,6.251c5.462,0,10.923-2.091,15.083-6.251l234.667-234.667 C514.096,145.416,514.096,131.933,505.755,123.592z">
      </path>
    </svg></button></h3>
    
    <div class="accordion-panel">
      <div>
        <div class="accordion-body pb-4 pr-8 text-base md:text-lg leading-relaxed text-gray-700 dark:text-gray-300">
          Windows 11 shares its kernel architecture with Windows Server 2022. While Windows 10 could run older 1809 images under process isolation or standard Hyper-V isolation, Windows 11 provides the most stable, performant, and supported developer experience using Windows Server 2022 (LTSC2022) base containers.
        </div>
      </div>
    </div>
  </div>



  
  
  
  
  

  
  

  <div class="accordion-item" data-open="">
    <h3 class="m-0"><button type="button" class="accordion-header" data-accordion-header aria-expanded="false"><span
      class="accordion-title font-display text-xl md:text-2xl font-bold gradient-text-emerald-prism">Why do I get a &#39;pull access denied&#39; error for images that are built locally?</span><svg class="accordion-icon"
      viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path fill="currentColor"
        d="M505.755,123.592c-8.341-8.341-21.824-8.341-30.165,0L256.005,343.176L36.421,123.592c-8.341-8.341-21.824-8.341-30.165,0 s-8.341,21.824,0,30.165l234.667,234.667c4.16,4.16,9.621,6.251,15.083,6.251c5.462,0,10.923-2.091,15.083-6.251l234.667-234.667 C514.096,145.416,514.096,131.933,505.755,123.592z">
      </path>
    </svg></button></h3>
    
    <div class="accordion-panel">
      <div>
        <div class="accordion-body pb-4 pr-8 text-base md:text-lg leading-relaxed text-gray-700 dark:text-gray-300">
          This happens when a downstream service depends on a local image that has not been created yet. Because Docker cannot find the image locally, it assumes it lives on Docker Hub and tries to download it. Building your dependency images (such as solution and nodejs) before running docker compose up fixes this issue.
        </div>
      </div>
    </div>
  </div>



  
  
  
  
  

  
  

  <div class="accordion-item" data-open="">
    <h3 class="m-0"><button type="button" class="accordion-header" data-accordion-header aria-expanded="false"><span
      class="accordion-title font-display text-xl md:text-2xl font-bold gradient-text-solar-flare">Do I need to reinstall Docker Desktop if it was installed in my user profile?</span><svg class="accordion-icon"
      viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path fill="currentColor"
        d="M505.755,123.592c-8.341-8.341-21.824-8.341-30.165,0L256.005,343.176L36.421,123.592c-8.341-8.341-21.824-8.341-30.165,0 s-8.341,21.824,0,30.165l234.667,234.667c4.16,4.16,9.621,6.251,15.083,6.251c5.462,0,10.923-2.091,15.083-6.251l234.667-234.667 C514.096,145.416,514.096,131.933,505.755,123.592z">
      </path>
    </svg></button></h3>
    
    <div class="accordion-panel">
      <div>
        <div class="accordion-body pb-4 pr-8 text-base md:text-lg leading-relaxed text-gray-700 dark:text-gray-300">
          Yes. A per-user installation (inside %LOCALAPPDATA%) does not install the privileged background service (com.docker.service) needed for Windows containers and Hyper-V isolation. You must reinstall Docker Desktop using the system-wide installer with administrator rights.
        </div>
      </div>
    </div>
  </div>



  
  
  
  
  

  
  

  <div class="accordion-item" data-open="">
    <h3 class="m-0"><button type="button" class="accordion-header" data-accordion-header aria-expanded="false"><span
      class="accordion-title font-display text-xl md:text-2xl font-bold gradient-text-vital-ocean">How do I stop Docker Compose from treating passwords with &#39;$&#39; as missing variables?</span><svg class="accordion-icon"
      viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <path fill="currentColor"
        d="M505.755,123.592c-8.341-8.341-21.824-8.341-30.165,0L256.005,343.176L36.421,123.592c-8.341-8.341-21.824-8.341-30.165,0 s-8.341,21.824,0,30.165l234.667,234.667c4.16,4.16,9.621,6.251,15.083,6.251c5.462,0,10.923-2.091,15.083-6.251l234.667-234.667 C514.096,145.416,514.096,131.933,505.755,123.592z">
      </path>
    </svg></button></h3>
    
    <div class="accordion-panel">
      <div>
        <div class="accordion-body pb-4 pr-8 text-base md:text-lg leading-relaxed text-gray-700 dark:text-gray-300">
          <p>Docker Compose uses bash-style variable substitution, so any $VARIABLE or ${VARIABLE} syntax is evaluated as an environment variable. If your password contains a dollar sign (e.g., P@</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>w</mi><mi>o</mi><mi>r</mi><mi>d</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mi>e</mi><mi>s</mi><mi>c</mi><mi>a</mi><mi>p</mi><mi>e</mi><mi>e</mi><mi>v</mi><mi>e</mi><mi>r</mi><mi>y</mi><mi>d</mi><mi>o</mi><mi>l</mi><mi>l</mi><mi>a</mi><mi>r</mi><mi>s</mi><mi>i</mi><mi>g</mi><mi>n</mi><mi>b</mi><mi>y</mi><mi>t</mi><mi>y</mi><mi>p</mi><mi>i</mi><mi>n</mi><mi>g</mi><mi>t</mi><mi>w</mi><mi>o</mi><mo stretchy="false">(</mo></mrow><annotation encoding="application/x-tex">word), escape every dollar sign by typing two (</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.02691em;">w</span><span class="mord mathnormal" style="margin-right:0.02778em;">or</span><span class="mord mathnormal">d</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">esc</span><span class="mord mathnormal">a</span><span class="mord mathnormal">p</span><span class="mord mathnormal">ee</span><span class="mord mathnormal" style="margin-right:0.03588em;">v</span><span class="mord mathnormal" style="margin-right:0.03588em;">ery</span><span class="mord mathnormal">d</span><span class="mord mathnormal">o</span><span class="mord mathnormal" style="margin-right:0.01968em;">ll</span><span class="mord mathnormal">a</span><span class="mord mathnormal">rs</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">nb</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mord mathnormal">t</span><span class="mord mathnormal" style="margin-right:0.03588em;">y</span><span class="mord mathnormal">p</span><span class="mord mathnormal">in</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal" style="margin-right:0.02691em;">tw</span><span class="mord mathnormal">o</span><span class="mopen">(</span></span></span></span></span><p>) in your configuration files, or store the password securely in your .env file.</p>

        </div>
      </div>
    </div>
  </div>


          </div>

          
          
          

          
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-conclusion" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">🏁 Conclusion</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>
<p>A successful <a href="/blog/sitecore-docker-windows-11-ltsc2022/"><span class="dark:text-gray-300 font-semibold gradient-text">Sitecore Docker LTSC2022 migration</span></a>
 starts by proving that <a href="https://docs.docker.com/desktop/setup/install/windows-install/" target="_blank" rel="noopener"><span class="dark:text-gray-300 font-semibold gradient-text-aqua">Docker Desktop</span></a>
 is installed system-wide and actively running in Windows container mode. Once you confirm <span class="rounded-lg inlinehighlight shadow transition dark:bg-gray-100 dark:text-gray-600 bg-primary text-white">OSType: windows</span>, aligning your image tags, centralizing variables in <code>.env</code>, validating your Compose configuration, and building foundation dependencies in the right order will keep your local developer environment stable and fast.</p>
<p>Following this sequence prevents hours of unnecessary Dockerfile edits caused by symptoms of the wrong daemon mode or missing system services.</p>
<hr>








<div class="flex items-center gap-2 flex-wrap mt-0 !mt-0 p-0" style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">
  
    <h2 id="-creditreferences" class="mt-0 !mt-0 pt-0 pb-0 " style="margin-top:0.5em!important;margin-bottom:-0.3em!important;padding-top:0!important;">🧾 Credit/References</h2>
  
  
    <span class="go-to-top">
      <a class="go-to-top-a " href="#TableOfContents" title="Go to Top"><svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M7 11l5-5m0 0l5 5m-5-5v12"/></svg></a>      
    </span>
  
</div>



<div class="table-wrapper">
<table class="style-table"><tbody><tr><td><a href="https://www.amitk.net/blog/deploy-azure-functions-sitecoreai-forms-dataverse/" target="_blank" rel="noopener"><strong>Windows container version compatibility - Microsoft Learn</strong></a></td><td><a href="https://github.com/AmitKumar-AK/sitecoreai-dataverse-connector/tree/main/SitecoreAI-Dataverse-Azure-Functions" target="_blank" rel="noopener"><strong>SitecoreAI Webhooks</strong></a></td><td><a href="https://www.amitk.net/blog/build-custom-mcp-server-dotnet-csharp/" target="_blank" rel="noopener"><strong>Build Custom Sitecore MCP Tools in .NET C#</strong></a></td></tr><tr><td><a href="https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility" target="_blank" rel="noopener"><strong>Windows container version compatibility</strong></a></td><td><a href="https://docs.docker.com/desktop/setup/install/windows-install/" target="_blank" rel="noopener"><strong>Install Docker Desktop on Windows - Docker Docs</strong></a></td><td><a href="https://docs.docker.com/desktop/setup/install/windows-permission-requirements/" target="_blank" rel="noopener"><strong>Understand permission requirements for Windows - Docker Docs</strong></a></td></tr><tr><td><a href="https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/" target="_blank" rel="noopener"><strong>Set, use, and manage variables in Compose - Docker Docs</strong></a></td><td><a href="https://docs.docker.com/reference/compose-file/build/" target="_blank" rel="noopener"><strong>Compose Build Specification - Docker Docs</strong></a></td><td><a href="https://docs.docker.com/reference/compose-file/services/" target="_blank" rel="noopener"><strong>Define services in Docker Compose - Docker Docs</strong></a></td></tr><tr><td><a href="https://doc.sitecore.com/xp/en/developers/104/developer-tools/run-your-first-sitecore-instance.html" target="_blank" rel="noopener"><strong>Run your first Sitecore instance - Sitecore Documentation</strong></a></td><td><a href="https://github.com/Sitecore/docker-examples" target="_blank" rel="noopener"><strong>Sitecore Docker Examples - GitHub</strong></a></td><td><a href="https://github.com/Sitecore/xmcloud-starter-js/blob/main/local-containers/.env" target="_blank" rel="noopener"><strong>XM Cloud starter local containers - GitHub</strong></a></td></tr></tbody>
  
</table>
</div>
]]></content:encoded></item></channel></rss>