scripts/Windows/install_docker_desktop_after_reboot.ps1
Write-Host "Completing the configuration of Docker for Desktop..." $ErrorActionPreference = "Stop" # start Docker & "$env:ProgramFiles\Docker\Docker\Docker Desktop.exe" # wait while Docker Desktop is started $i = 0 $finished = $false Write-Host "Waiting for Docker to start..." while ($i -lt (300)) { $i +=1 $dockerSvc = (Get-Service com.docker.service -ErrorAction SilentlyContinue) if ((Get-Process 'Docker Desktop' -ErrorAction SilentlyContinue) -and $dockerSvc -and $dockerSvc.status -eq 'Running') { $finished = $true Write-Host "Docker started!" break } Write-Host "Retrying in 5 seconds..." sleep 5; } if (-not $finished) { Throw "Docker has not started" } [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # What Windows is that? $osVerBuild = (Get-CimInstance Win32_OperatingSystem).BuildNumber # Major Minor Build Revision # ----- ----- ----- -------- # 10 0 17763 0 # Windows Server 2016 10.0.14393 # Windows 10 (1709) 10.0.16299 # Windows 10 (1803) 10.0.17134 # Windows Server 2019 10.0.17763 function PullRunDockerImages($minOsBuild, $serverCoreTag, $nanoServerTag) { $hypervFeature = (Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V -Online) $hypervInstalled = ($hypervFeature -and $hypervFeature.State -eq 'Enabled') if ($osVerBuild -ge $minOsBuild) { # Windows Server 2016 or above $isolation = $null if ($osVerBuild -gt $minOsBuild -and $hypervInstalled) { $isolation = 'hyperv' } elseif ($osVerBuild -eq $minOsBuild) { $isolation = 'default' } if ($isolation) { Write-Host "Pulling and running '$serverCoreTag' images in '$isolation' mode" docker pull mcr.microsoft.com/windows/servercore:$serverCoreTag #docker run --rm --isolation=$isolation mcr.microsoft.com/windows/servercore:$serverCoreTag cmd /c echo hello_world docker pull mcr.microsoft.com/windows/nanoserver:$nanoServerTag #docker run --rm --isolation=$isolation mcr.microsoft.com/windows/nanoserver:$nanoServerTag cmd /c echo hello_world } } } Write-Host "Setting experimental mode" $configPath = "$env:programdata\docker\config\daemon.json" if (Test-Path $configPath) { $daemonConfig = Get-Content $configPath | ConvertFrom-Json $daemonConfig | Add-Member NoteProperty "experimental" $true -force $daemonConfig | ConvertTo-Json -Depth 20 | Set-Content -Path $configPath } else { New-Item "$env:programdata\docker\config" -ItemType Directory -Force | Out-Null Set-Content -Path $configPath -Value '{ "experimental": true }' } Write-Host "Switching Docker to Linux mode..." Switch-DockerLinux Start-Sleep -s 20 docker version docker pull busybox docker run --rm -v 'C:\:/user-profile' busybox ls /user-profile docker pull alpine docker run --rm alpine echo hello_world Write-Host "Switching Docker to Windows mode..." Switch-DockerWindows Start-Sleep -s 20 docker version docker pull busybox docker run --rm -v "$env:USERPROFILE`:/user-profile" busybox ls /user-profile if (-not $env:INSTALL_LATEST_ONLY) { PullRunDockerImages 14393 'ltsc2016' 'sac2016' PullRunDockerImages 17134 '1803' '1803' } PullRunDockerImages 17763 'ltsc2019' '1809' docker pull mcr.microsoft.com/dotnet/framework/aspnet:4.8 Write-Host "Disable SMB share for disk C:" Remove-SmbShare -Name C -ErrorAction SilentlyContinue -Force # enable Docker auto run Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Docker Desktop" ` -Value "$env:ProgramFiles\Docker\Docker\Docker Desktop.exe" Write-Host "Disabling automatic updates and usage statistics" $settingsPath = "$env:appdata\Docker\settings.json" if (Test-Path $settingsPath) { $dockerSettings = Get-Content $settingsPath | ConvertFrom-Json $dockerSettings | Add-Member NoteProperty "checkForUpdates" $false -force $dockerSettings | Add-Member NoteProperty "analyticsEnabled" $false -force $dockerSettings | ConvertTo-Json -Depth 20 | Set-Content -Path $settingsPath } else { Write-Warning "$settingsPath was not found!" } Write-Host "Docker CE installed and configured" #Switch-DockerLinux |