Skip to content

[Bug]: WSL2/Docker Desktop: Proxmox healthcheck fails because Manager CT 100 does not boot correctly #337

Description

@ArshSSandhu

Current URL

N/A — this happens during local Docker startup before the app page loads.

Username

N/A — not logged in yet. The issue happens before the local stack fully starts.

Version

Commit hash: d3f540e

Steps to reproduce

  1. Clone the repository fresh inside Ubuntu WSL2.

  2. From the repo root, run:

    docker compose up -d
    
  3. Most containers start, but opensource-server-proxmox-1 becomes unhealthy.

  4. bootstrap-manager does not start because it depends on proxmox being healthy.

  5. Inspecting the Proxmox healthcheck shows that it cannot connect to https://10.254.0.2:443.

  6. Entering the Proxmox container and checking Manager CT 100 shows that the container is stopped and has an LXC config error.

Expected behavior

Running docker compose up -d should start the local stack successfully. Manager CT 100 should boot normally, receive IP 10.254.0.2, start nginx/app/Postgres services, and allow the Proxmox healthcheck to pass.

Actual behavior

docker compose up -d fails because the proxmox container becomes unhealthy:

dependency failed to start: container opensource-server-proxmox-1 is unhealthy

The healthcheck fails because it cannot reach Manager:

curl: (7) Failed to connect to 10.254.0.2 port 443

Inside the Proxmox container:

pct status 100

shows:

status: stopped

Running:

lxc-info -n 100

shows an LXC config parse error:

Failed to parse config file "/var/lib/lxc/100/config" at line "lxc.cgroup.cpuset.cpus = "
Failed to load config for 100

The generated LXC config contains an empty cpuset line:

grep -n "cpuset" /var/lib/lxc/100/config

Output:

34:lxc.cgroup.cpuset.cpus =

The CT config also includes:

cores: 4
entrypoint: /sbin/init systemd.unit=emergency.target

Additional context

I was able to reproduce this from a clean clone and fresh Docker volumes.

Manual workaround

Inside the Proxmox container, I ran:

pct set 100 --delete cores
pct set 100 --delete entrypoint
pct stop 100
pct start 100

After removing cores, the bad cpuset line disappeared:

no cpuset line

After removing the emergency entrypoint and restarting CT 100, Manager booted normally:

State: RUNNING
IP: 10.254.0.2

Networking and services also came up correctly:

  • nginx on ports 80 and 443
  • Manager app on port 3000
  • Postgres on port 5432
  • DNS on port 53

Finally, the healthcheck target worked:

curl -kI --connect-timeout 5 https://10.254.0.2

Output:

HTTP/2 200
server: nginx

Possible cause

This seems to be related to Manager CT 100 being created with settings that do not work correctly in my Docker Desktop + WSL2 environment:

  1. cores: 4 causes LXC to generate an invalid empty cpuset line:
lxc.cgroup.cpuset.cpus =
  1. entrypoint: /sbin/init systemd.unit=emergency.target causes CT 100 to boot into emergency mode, preventing normal networking and services from starting.

Possible solutions

  • Update the Manager CT creation script to avoid setting cores in environments where it generates an empty cpuset line.
  • Avoid leaving Manager CT 100 configured to boot into systemd.unit=emergency.target.
  • Add troubleshooting documentation for Windows + WSL2 developers explaining this failure path and manual workaround.

Screenshots/logs

Screenshots/logs attached below.

1. Docker Compose failure

Image

2. Healthcheck failure

Image

3. Manager CT 100 startup error

Image

4. Bad LXC/CT config

Image

5. Manual workaround

Image

6. Final successful result

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions