How to install Podman on Windows without admin rights (other than the
one-time wsl --install, which Windows itself requires elevation for).
Sources:
- Podman-for-Windows tutorial
- Podman Desktop install docs
- WiX installer source — public MSI properties
Open a non-elevated PowerShell and:
$url = 'https://gist.githubusercontent.com/YoraiLevi/c19fa68ff740cdb7dfe8d2c3a0240680/raw/install-podman-user.ps1'
$dest = "$env:TEMP\install-podman-user.ps1"
Invoke-WebRequest -UseBasicParsing $url -OutFile $dest
Unblock-File $dest # strip Mark-of-the-Web so PS doesn't block it
& $dest -IncludeDesktop # any script flags go hereWhat a successful run looks like (verified on Windows 11 Pro build 26200)
==> Checking Windows version
Microsoft Windows 11 Pro (build 26200)
==> Checking hardware virtualization
[OK] Enabled.
==> Checking WSL2
[OK] Available.
==> Installing Podman CLI (per-user)
Downloading podman-installer-windows-amd64.msi (v5.8.2)
[OK] Installed to C:\Users\devic\AppData\Local\Programs\Podman
==> Installing Podman Desktop (per-user)
Downloading podman-desktop-1.27.1-setup-x64.exe (v1.27.1)
[OK] Installed.
podman: C:\Users\devic\AppData\Local\Programs\Podman\podman.exe
podman version 5.8.2
==> Initializing podman machine (first run downloads ~1 GB Fedora image)
Looking up Podman Machine image at quay.io/podman/machine-os:5.8 to create VM
Getting image source signatures
Copying blob e2b6cbcadd8b done |
Copying config 44136fa355 done |
Writing manifest to image destination
e2b6cbcadd8b41b708fecb58a246a20d737dee0ef26872a3f75b575f77eba968
Extracting compressed file: podman-machine-default-amd64: done
Importing operating system into WSL (this may take a few minutes on a new WSL install)...
wsl: Sparse VHD support is currently disabled due to potential data corruption.
To force a distribution to use a sparse vhd, please run:
wsl.exe --manage <DistributionName> --set-sparse true --allow-unsafe
The operation completed successfully.
Configuring system...
Machine init complete
To start your machine run:
podman machine start
==> Starting podman machine
==> Smoke test: hello-world
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob sha256:81df7ff16254ed9756e27c8de9ceb02a9568228fccadbf080f41cc5eb5118a44
Copying config sha256:5dd467fce50b56951185da365b5feee75409968cbab5767b9b59e325fb2ecbc0
Writing manifest to image destination
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
Project: https://github.com/containers/podman
Website: https://podman.io
Desktop: https://podman-desktop.io
Documents: https://docs.podman.io
YouTube: https://youtube.com/@Podman
X/Twitter: @Podman_io
Mastodon: @Podman_io@fosstodon.org
[OK] Podman is working.
Script flags: -IncludeDesktop, -SkipMachine, -Provider wsl|hyperv.
# Download the MSI from the latest GitHub release
$asset = (Invoke-RestMethod https://api.github.com/repos/containers/podman/releases/latest).assets |
Where-Object name -like 'podman-installer-windows-amd64.msi' | Select-Object -First 1
$msi = Join-Path $env:TEMP $asset.name
Invoke-WebRequest -UseBasicParsing $asset.browser_download_url -OutFile $msi
# Per-user install. No admin, no UAC.
msiexec /i $msi /qn /norestart /l*v "$env:TEMP\podman-msi.log" `
MSIINSTALLPERUSER=1 MACHINE_PROVIDER=wsl
# New PowerShell window so PATH picks up podman.exe
podman machine init
podman machine start
podman run --rm hello-worldFiles land in %LOCALAPPDATA%\Programs\Podman, provider config in
%APPDATA%\containers\containers.conf.d\, PATH updated for your user only.
| Requirement | Why | How to check |
|---|---|---|
| Windows 11, or Windows 10 build 19043+ | Installer minimum | winver |
| Hardware virtualization in BIOS/UEFI | WSL2 needs it | Task Manager → Performance → CPU → "Virtualization: Enabled" |
| WSL2 installed | Default Podman backend | wsl --status shows "Default Version: 2" |
WSL2 install (one-time, needs admin):
wsl --installReboot, then continue as your normal user.
From the WiX source (podman-main.wxs):
| Property | Value | Effect |
|---|---|---|
MSIINSTALLPERUSER |
1 |
Install for the current user only (no admin) |
ALLUSERS |
1 |
Install machine-wide (requires admin) |
MACHINE_PROVIDER |
wsl (default) or hyperv |
Backend; writes the provider config file |
SKIP_CONFIG_FILE_CREATION |
1 |
Don't write that config file |
winget install RedHat.Podman cannot do a per-user install of Podman
today, regardless of flags. Confirmed by testing:
--scope user→APPINSTALLER_CLI_ERROR_NO_APPLICABLE_INSTALLER(-1978335216). The manifest declares no per-user variant.- Without
--scope→ UAC prompt, then installs toC:\Program Files\RedHat\Podman(machine-wide). winget runs the Burn bootstrapper which requests admin in its embedded manifest, so the underlying MSI runs elevated and ignoresMSIINSTALLPERUSER. - The manifest also declares a
Microsoft-Windows-Subsystem-LinuxWindows-feature dependency that triggers UAC if WSL2 isn't already on the box (podman#22045, winget-pkgs#144380).
Use the MSI directly with MSIINSTALLPERUSER=1. That's the path Podman's own
docs and the WiX source treat as the supported per-user install.
$asset = (Invoke-RestMethod https://api.github.com/repos/podman-desktop/podman-desktop/releases/latest).assets |
Where-Object name -like 'podman-desktop-*-setup-x64.exe' | Select-Object -First 1
$exe = Join-Path $env:TEMP $asset.name
Invoke-WebRequest -UseBasicParsing $asset.browser_download_url -OutFile $exe
& $exe /S /CURRENTUSEROr via the GUI: download from https://podman-desktop.io/downloads/windows, double-click, choose "Only for me (Username)".
| Symptom | Fix |
|---|---|
wsl --install says "Access denied" |
Run PowerShell as Administrator for this one step |
podman not on PATH after install |
Open a new PowerShell window, or refresh PATH: $env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User') |
Install ended up in C:\Program Files\... |
You used winget or ran the Burn .exe. Uninstall, then use the MSI with MSIINSTALLPERUSER=1 |
podman machine init errors about virtualization |
Enable VT-x/AMD-V in BIOS, reboot |
| Can't bind port 80 in a container | Rootless can't use ports <1024. Map to a high port, or podman machine stop; podman machine set --rootful; podman machine start |
| Docker Desktop also installed and clashes | setx DOCKER_HOST "npipe:////./pipe/podman-machine-default" |
| Want to start over | podman machine stop; podman machine rm -f; podman machine init |
podman machine stop
podman machine rm -f
$msi = (Invoke-RestMethod https://api.github.com/repos/containers/podman/releases/latest).assets |
Where-Object name -like 'podman-installer-windows-amd64.msi' | Select-Object -First 1
msiexec /x $msi.browser_download_url /qn # or: Settings → Apps → Podman → Uninstall.\install-podman-user.ps1 # CLI only, per-user, WSL provider
.\install-podman-user.ps1 -IncludeDesktop # also install Podman Desktop
.\install-podman-user.ps1 -SkipMachine # install only; don't init/start machine
.\install-podman-user.ps1 -Provider hyperv # Hyper-V backend (Pro/Enterprise)