Skip to content

Volume-based Zwift installation to eliminate per-launch chown #315

Description

@netbrain

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions