Run compose like the terminal does, and follow changes made there (0.67.2)
StackPilot called `docker compose -p <folder> -f compose.yaml`, which is
not what `docker compose` typed in the stack's folder does. A
compose.override.yaml or a COMPOSE_FILE in .env applied in a terminal
and was dropped by the next Start in StackPilot, which recreated the
containers without it. A compose file's `name:` or a COMPOSE_PROJECT_NAME
in .env made the terminal's containers invisible: the stack showed as
stopped while running, and Start set up a second copy next to it.
Compose now runs in the stack's folder without -f, so it loads the same
files, and -p is the name compose itself picks there: COMPOSE_PROJECT_NAME
from .env, else the last `name:` among the compose files (${VAR} from
.env), else the folder name. A stack StackPilot already runs under its
folder name keeps that name while it has containers or volumes under it
and none under the declared one: switching would have brought it up
again on empty volumes. Backups record the project, and a restore takes
it from the files it has just put back.
Changes made outside StackPilot now reach every view:
- docker_watch_service reads Docker's events once for the backend. The
dashboard rollup (cached 25s) and the stats cache are stale as soon as
the event generation moves; the tiles followed a terminal `compose
stop` after 15-30s, now within a second.
- Image events re-read the local digests, so a `docker compose pull` in
a terminal clears the update badge instead of leaving it until the
next registry check (an hour by default).
- The browser catches up when its event socket reconnects; what changed
while it was down waited for the 60s poll.
- The stack detail carries a revision of the compose file and .env;
saving after they changed on disk is refused with 409 and the editor
offers to overwrite or to load the version on disk. A save used to
replace a terminal edit without a word.
- A stack whose folder is gone is flagged "folder missing" instead of
passing for an ordinary stopped stack.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fx7gcuy8d6nPd95g43rGHu
This commit is contained in:
1 parent
d6cebb3371
commit
06234c1067
21 files changed
+811
-45
No files matched your search
@@ -507,6 +507,9 @@ async def _create(
|
||||
manifest = {
|
||||
"format_version": BACKUP_FORMAT_VERSION,
|
||||
"stack_id": stack_id,
|
||||
# Volumes are prefixed with the project, which a compose file's
|
||||
# name: or COMPOSE_PROJECT_NAME can make anything at all.
|
||||
"project": compose_service.project_name(stack_id),
|
||||
"name": name,
|
||||
"created_at": compose_service.now().isoformat(),
|
||||
"include_volumes": include_volumes,
|
||||
@@ -920,9 +923,11 @@ def restore_backup(
|
||||
old_id = compose_service.slugify(manifest.get("stack_id") or stack_id)
|
||||
renamed = stack_id != old_id
|
||||
# Volumes are named after the compose *project*, which differs from the id
|
||||
# for a folder compose had to normalise ("my.app" -> "myapp_data").
|
||||
old_project = compose_service.project_name(manifest.get("stack_id") or stack_id)
|
||||
new_project = compose_service.project_name(stack_id)
|
||||
# for a folder compose had to normalise ("my.app" -> "myapp_data"), and
|
||||
# for one whose files name the project. Backups before 0.67.2 do not say.
|
||||
old_project = manifest.get("project") or compose_service.project_name(
|
||||
manifest.get("stack_id") or stack_id
|
||||
)
|
||||
old_dir = manifest.get("stack_dir") or ""
|
||||
|
||||
directory = compose_service.stack_dir(stack_id)
|
||||
@@ -942,6 +947,8 @@ def restore_backup(
|
||||
|
||||
with tarfile.open(tar_path, "r:gz") as tar:
|
||||
_restore_tree(tar, directory, excluded | held_back, held_back, warnings)
|
||||
# Read from the files just put back: their name: / .env decide it.
|
||||
new_project = compose_service.project_name(stack_id)
|
||||
skipped += [{"kind": "bind", "source": rel, "reason": "not requested"} for rel in held_back]
|
||||
|
||||
for bind in manifest.get("binds", []):
|
||||
|
||||
Reference in new issue
Block a user