Problem
When using Docker with a uid/gid that differs from the container default (1000:1000), the entrypoint runs chown on every launch. The container is ephemeral, so /home/user is recreated from the image layer each time with 1000:1000 ownership. Currently only ZWIFT_DOCS is persisted as a volume.
Suggested solution
Decouple the Zwift installation from the container image. Instead of baking Zwift into the image, offer a volume-based installation mode:
- Minimal container image: only wine + dependencies, no Zwift pre-installed
- First run: user runs
zwift --install, which mounts an empty volume at /home/user and runs the Zwift installer into it
- Subsequent runs: mount the same volume, launch directly. No chown needed since ownership persists in the volume
- Updates: Zwift's own updater handles it, or user runs
zwift --update
This approach:
- Eliminates the per-launch chown entirely
- Shrinks the container image (no bundled Zwift installation)
- Mirrors how Zwift works on a real machine (install once, self-update)
- Could coexist with the current pre-installed approach as an opt-in alternative
This aligns with the second variant described in issue #28 (minimal container with volume-based Zwift download on first run).
Problem
When using Docker with a uid/gid that differs from the container default (1000:1000), the entrypoint runs chown on every launch. The container is ephemeral, so /home/user is recreated from the image layer each time with 1000:1000 ownership. Currently only ZWIFT_DOCS is persisted as a volume.
Suggested solution
Decouple the Zwift installation from the container image. Instead of baking Zwift into the image, offer a volume-based installation mode:
zwift --install, which mounts an empty volume at /home/user and runs the Zwift installer into itzwift --updateThis approach:
This aligns with the second variant described in issue #28 (minimal container with volume-based Zwift download on first run).