DSH Linux on WSL2 Docker Desktop: engine volume paths are not host-visible; configured volumes does not reach Store

オープン
#380 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
30/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
docker, linux, sqlite

調査の方向性

Start by reading dsh/packages/host/src/box.js, config.js, init.js, layerfs-client.js, and index.js to trace volume configuration and Store path handling. The report identifies a narrow candidate fix on a local branch, but the WSL2 named-volume route needs an upstream architecture decision. Done means both requested regressions pass: custom volume roots are honored and missing roots fail before volume creation; Docker Desktop WSL2 can use an explicitly mounted named-volume Store through Init, fork, mount, commit, and reopen.

索引モデルが issue の本文から書いたものです。

説明

bug integration

LayerFS x DSH: Linux WSL2 / Docker Desktop Store-path topology is incompatible with current Host route

Version and host (reproduced)

  • Reproduced against LayerFS af1eeef109a36e2c187a0a0058c880f4607ca617 (PR #376 included).
  • On inspection, upstream main had moved to 5fb68ddc1acc3163e3ac3486133bde014c5fbed3 (9 later commits, none changing config.js, box.js, layerfs-client.js, init.js).
  • Ubuntu under WSL2, Docker Desktop Engine 29.7.2 via unix:///var/run/docker.sock.
  • Docker API reports DockerRootDir=/var/lib/docker and volume Mountpoint /var/lib/docker/volumes/<name>/_data.
  • Ubuntu Host /var/lib/docker/volumes does not exist; DSH web runs as nonroot and must stay nonroot.

Exact distinguishing test (read only; same persisted Store)

docker volume inspect lfs-core-network-20261021b --format '{{.Mountpoint}}'
# /var/lib/docker/volumes/lfs-core-network-20261021b/_data
docker run --rm --pull never --network none \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes:ro \
  -v lfs-core-network-20261021b:/named-store:ro \
  --entrypoint sh layerfs-352-runtime:node24 -c '
    test -f /var/lib/docker/volumes/lfs-core-network-20261021b/_data/global/store.sqlite && echo bind-visible || echo bind-missing
    test -f /named-store/global/store.sqlite && echo volume-visible || echo volume-missing
  '
# bind-missing
# volume-visible

Replace lfs-core-network-20261021b with an existing disposable named volume containing a LayerFS Store, and use any image with sh.

The Core SDK works in a container with the named volume explicitly mounted: project Init, branch fork, Workspace mount/exec/commit/unmount, branch merge and fresh process readback all passed. This issue is DSH Host / Docker Desktop topology, not evidence that LayerFS Core is broken.

Source-level mismatch (separate, narrow fix candidate)

  • dsh/packages/host/src/config.js: volumes: config.volumes || VOLUMES.
  • dsh/packages/host/src/index.js: the layerfs-host schema omitted volumes.
  • dsh/packages/host/src/init.js: hostAccess checks spec.volumes, but suppresses ENOENT, allowing an invisible root past preflight.
  • dsh/packages/host/src/layerfs-client.js: STORE_PATH: storePathOf(project.volume) does not bind spec.volumes.
  • dsh/packages/host/src/box.js: storePathOf hardcodes /var/lib/docker/volumes; the macOS Store Container callMounts also mounts that path, which resolves empty in this Docker Desktop WSL setup.
  • Upstream AGENTS.md currently authorizes the ported Store-worker exception for macOS only; do not silently enable it for Linux without an upstream architecture decision.

A minimal fix candidate for only the config/path/ENOENT defect exists on local branch
fix/wsl-docker-volumes-contract-20261021:
4b8cb8b9ef050ed9ebf063be9afa9579d17ce898 (base af1eeef...).
Changes: add volumes to real plugin config schema, bind it to Linux SDK Store path while retaining existing ported/macOS path, reject missing host root prior to Init, and add positive/negative Host regressions.
Targeted host, sim, runtime, syntax checks and git diff --check: PASS. Full DSH suite is NOT accepted: history tools require a missing sqlite3 binary, and unrelated history fixtures/assertions fail in this local environment.

Suggested upstream direction (separate from narrow fix)

Support a Docker Desktop/remote-engine Store route using Docker named-volume mounts for the client that opens the real Linux SDK Store (as tools/worktree_run.py already does), rather than depending on the Docker API Mountpoint being a Host-readable filesystem path. Reuse existing Host/SDK mechanisms; do not add another authority/controller, run DSH as root, chmod Docker's global volume tree, or weaken production service protections.

Request two independent regressions:

  1. With a real Linux-visible custom volume root, layerfs-host.volumes affects the Store path and a missing root refuses before Docker volume creation.
  2. Under Docker Desktop WSL2, distinguish engine Mountpoint vs Host namespace; explicitly mounted named-volume Store can Init/fork/mount/commit/reopen, with no production volume writable by the test.

No change has been deployed to live DSH 3081. This report is a candidate/proposal, not an upstream accepted fix.

主要言語
Rust
スター
2.1k
フォーク
110
平均マージ
23時間 52分
マージ済み PR(30日)
138

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Ephemeral-AI-Lab/layerfs のほかの issue

Ephemeral-AI-Lab/layerfs の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。