Installation & Deployment ✅ Beginner

Docker + n8n on Windows: A Complete Pitfall Guide

A beginner-friendly guide to installing Docker, WSL2, and n8n on Windows. Covers the 5 most common failure points with step-by-step fixes, including corporate IT restrictions.

📝 建立:2026年5月30日 ✅ 最後驗證:2026年5月30日
鴨編 卡住很正常——點段落旁的 😵 卡關 讓我們知道,或直接往下滾到問答區發問。 也可以用 👍 看懂 / 😢 看不懂 告訴我們哪裡寫得好、哪裡要改。

LaunchDock Why this guide exists: A Docker Desktop update once completely broke WSL2 permissions. This SOP is the result of debugging that — so you don’t have to.

📌 Mac user? This guide is Windows-only. For the much simpler Mac version, see: Docker + n8n on Mac: Complete Setup Guide


🛠️ Understanding the Tool Chain

Running Docker on Windows involves an unusual chain of tools. Understanding how they relate makes troubleshooting much easier:

ToolRoleAnalogy
WSL2A Linux virtual environment inside WindowsA studio apartment built inside your house
Docker DesktopGUI for managing containers; the actual engine runs inside WSL2The landlord living on the Windows floor
n8nAutomation tool running inside a Docker containerThe tenant in the studio apartment

💡 Core Concepts: Image vs Container

Before you run any commands, lock in these two ideas:

  • Image = A recipe. Read-only, static, downloaded once.
  • Container = A dish made from the recipe. Lives in memory, runs actively.

You can spin up multiple independent containers from the same n8n image. Just make sure these three parameters don’t conflict:

ParameterPurposeConflict Result
PortExternal access pointTwo containers can’t share the same Host Port
VolumeData storage locationPointing to the same folder causes data corruption
Container NameIdentifierNames must be unique

🚀 Installation Steps

Step 1: Install Docker Desktop

  1. Download from https://www.docker.com/products/docker-desktop/
  2. During install, select Use WSL 2 instead of Hyper-V (it’s the default — keep it checked)
  3. Restart your computer after installation

Step 2: Launch Your First n8n

Open PowerShell and create a clean folder for n8n data.

💡 C drive or D drive? Early Windows users frequently ran into boot failures caused by a full C drive. It’s recommended to store Docker data on your D drive (or any drive with more space) if you have one. The C drive is your system drive — keep it lean.

# Recommended: use D drive if available
mkdir D:\n8n_data

# If you only have a C drive: use root level, not inside Users folder
mkdir C:\n8n_data

Then run this command to start n8n (adjust the path to match what you just created):

# Using D drive (recommended)
docker run -d --name n8n -p 5678:5678 -v "D:\n8n_data:/home/node/.n8n" docker.n8n.io/n8nio/n8n

# Using C drive
docker run -d --name n8n -p 5678:5678 -v "C:\n8n_data:/home/node/.n8n" docker.n8n.io/n8nio/n8n

After a few seconds, open your browser and go to http://localhost:5678. If you see the n8n setup screen, you’re done!


🚨 The 5 Pitfalls and How to Fix Them

Pitfall 1: WSL2 Permission Denied (Most Common After Updates)

Symptom: Docker Desktop fails to start with an error like:

CreateProcessCommon:818: execvpe(/mnt/wsl/docker-desktop/docker-desktop-user-distro) failed: Permission denied

Cause: After a Docker Desktop update, it needs to deploy a mount proxy at the Windows/WSL2 boundary. If Ubuntu’s auto-mount doesn’t include metadata permissions, Linux rejects it with Permission denied.

Fix:

  1. Open PowerShell as Administrator
  2. Run this command to open Ubuntu’s config file:
wsl -d Ubuntu-24.04 -u root nano /etc/wsl.conf

If your Linux version is different (e.g., Ubuntu-22.04), replace Ubuntu-24.04 accordingly. Run wsl -l -v to see your installed versions. If you haven’t installed WSL yet, start here: WSL Complete Guide.

  1. The nano editor opens. You’ll see something like this:
[boot]
systemd=true
  1. Move to the end of the file and add the following:
[boot]
systemd=true

[automount]
enabled = true
options = "metadata,uid=1000,gid=1000,umask=22,fmask=11"
  1. Save and exit:
    • Press Ctrl + O → Press Enter to confirm
    • Press Ctrl + X to exit
  1. Back in PowerShell, restart WSL:
wsl --shutdown
  1. Reopen Docker Desktop — issue resolved.

🚨 If that doesn’t work: In Docker Desktop → Settings → Resources → WSL Integration, toggle Ubuntu-24.04 off, hit Apply & restart, then toggle it back on. This forces Docker to re-create its permission files.


Pitfall 2: Wrong Slashes + Spaces in Paths (Volume Mount Fails)

Symptom: n8n appears to start normally, but all workflows disappear after a restart. Or it fails to start entirely.

Cause:

  • Windows uses backslashes \; Docker containers (Linux) use forward slashes /. Mixing them breaks the mount.
  • If your Windows username contains a space (e.g., C:\Users\John Doe), Docker splits the command at the space.

Correct syntax:

# ✅ Correct: wrap the entire volume path in double quotes
docker run -d --name n8n -p 5678:5678 -v "C:\n8n_data:/home/node/.n8n" docker.n8n.io/n8nio/n8n

# ❌ Wrong: no quotes, space in path causes breakage
docker run -d --name n8n -p 5678:5678 -v C:\Users\John Doe\n8n:/home/node/.n8n docker.n8n.io/n8nio/n8n

Three rules to follow:

  1. Wrap the entire -v path in double quotes ""
  2. Prefer D drive (e.g., D:\n8n_data); if you only have C drive, use the root level (e.g., C:\n8n_data) — never a path like C:\Users\Your Name with spaces
  3. The container-side path (after the colon) always uses forward slashes /

⚠️ C drive space warning: n8n workflows and logs accumulate over time. The C drive is already under pressure from Windows itself — storing data on D drive prevents the classic “C drive full, Windows won’t boot” situation.


Pitfall 3: Corporate IT Restrictions (The Invisible Blocker)

Symptom: Docker seems to be running fine, but http://localhost:5678 just spins forever in the browser. Or docker pull hangs indefinitely.

Cause: Corporate machines are often locked down by:

RestrictionImpact
Firewall / Group Policy (GPO)Blocks non-standard ports (like 5678), cuts off loopback connections between Windows and WSL2
Security software (Zscaler, Trend Micro, GlobalProtect VPN)Intercepts SSL certificates, causing docker pull to fail with certificate signed by unknown authority
IT policyBlocks unauthorized software installation entirely

What to try:

First, try this: Replace localhost with 127.0.0.1:

http://127.0.0.1:5678

If that doesn’t work, switch to a different port (port 8080 is commonly allowed in corporate environments):

docker run -d --name n8n -p 8080:5678 -v "C:\n8n_data:/home/node/.n8n" docker.n8n.io/n8nio/n8n

Then open http://localhost:8080 in your browser.

If docker pull is hanging, you need to configure a corporate proxy in Docker Desktop: Settings → Resources → Proxies → Enter your company’s HTTP/HTTPS Proxy address (ask IT for this)

💡 Pro tip: Before installing Docker on a company machine, ask IT three questions: (1) Is Docker Desktop allowed? (2) Do I need a proxy? (3) Is port 5678 accessible locally? Getting authorized first saves you from a frustrating cycle of security blocks.


Pitfall 4: WSL2 Quietly Eating Your C Drive

Symptom: A few weeks after installing Docker, your C drive is nearly full. Deleting images in Docker doesn’t free up any space.

Cause: WSL2 stores its data in a virtual disk file called ext4.vhdx. This file only grows — it never shrinks automatically — even when you delete files inside Linux.

Fix (recommended once a month):

  1. Fully quit Docker Desktop, then run in PowerShell:
wsl --shutdown
  1. Open Windows search, type diskpart, and run as Administrator

  2. In the diskpart window, run these commands in order (replace YourUsername with your actual Windows account name):

select vdisk file="C:\Users\YourUsername\AppData\Local\Docker\wsl\data\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

Compression time depends on file size — it may take a few minutes.


Pitfall 5: Port Conflict (Easiest Fix)

Symptom: Running docker run gives you:

Bind for 0.0.0.0:5678 failed: port is already allocated

Cause: You already have an n8n container running (possibly stopped but not removed), or another program is using port 5678.

Fix:

# Check all containers (including stopped ones)
docker ps -a

# If you see an old n8n container, remove it
docker rm -f n8n

# Check if another program is using port 5678
netstat -ano | findstr "5678"

💡 Daily Habits That Prevent Problems

Habit 1: Shut Down Gracefully

Before restarting or shutting down Windows, right-click the Docker Desktop icon in the system tray and select Quit Docker Desktop.

Force-shutting Windows while Docker is running can corrupt the WSL2 filesystem — and you’ll spend the next morning fixing it.

Habit 2: Read the Logs

When n8n’s web UI won’t load, don’t immediately reinstall. Check the logs first:

docker logs n8n

Logs usually tell you exactly what’s wrong — “permission denied on folder” or “port already in use” — in plain language.

Habit 3: Volume Is Sacred

Containers are disposable. Your Volume is not.

As long as -v "C:\n8n_data:/home/node/.n8n" is correct in your run command, your workflows and credentials will survive any Docker update, container deletion, or system restart.


🗺️ Quick Command Reference

# Start n8n (D drive, recommended)
docker run -d --name n8n -p 5678:5678 -v "D:\n8n_data:/home/node/.n8n" docker.n8n.io/n8nio/n8n

# Start n8n (C drive)
docker run -d --name n8n -p 5678:5678 -v "C:\n8n_data:/home/node/.n8n" docker.n8n.io/n8nio/n8n

# View running containers
docker ps

# View all containers (including stopped)
docker ps -a

# View n8n logs
docker logs n8n

# Stop n8n
docker stop n8n

# Remove n8n container (your data stays safe in the Volume)
docker rm n8n

# Force restart WSL2
wsl --shutdown

🔗 Further Reading

這篇文章對你有幫助嗎?

💬 問答區

卡關了?直接在這裡問,其他讀者和作者都能幫忙解答。

載入中...