0c8c6b854d
Apple Container removes containers when they stop, making the stop-then-export flow impossible regardless of the --rm flag. Replace `container export` (requires stopped container) with `container exec --user root <name> tar --create ... --file=- --directory=/ .` streamed to a temp file, then build the committed image from that archive as before. The bottle stays running after commit, which is better UX. Drop the stop-confirm prompt from MacosContainerFreezer since we no longer need to stop the container at all.
32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
"""MacosContainerFreezer — snapshot a macOS container bottle.
|
|
|
|
Apple Container removes containers when they stop, making stop-then-export
|
|
impossible. Instead, commit_container execs into the running container and
|
|
streams the root filesystem via tar. The bottle continues running after commit.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .. import ActiveAgent
|
|
from ..freeze import Freezer
|
|
from .util import commit_container
|
|
from ...log import info
|
|
|
|
|
|
class MacosContainerFreezer(Freezer):
|
|
"""Freezes a macOS-container bottle via exec-tar + image rebuild."""
|
|
|
|
backend_name = "macos-container"
|
|
|
|
def _freeze(self, agent: ActiveAgent) -> str:
|
|
container = f"bot-bottle-{agent.slug}"
|
|
image_tag = f"bot-bottle-committed-{agent.slug}:latest"
|
|
commit_container(container, image_tag)
|
|
return image_tag
|
|
|
|
def _export_hint(self, slug: str, image_ref: str) -> None:
|
|
info(
|
|
f"to export for migration: "
|
|
f"container image save {image_ref} -o {slug}.tar"
|
|
)
|