diff --git a/platform/mcp/compose.yaml b/platform/mcp/compose.yaml index 3905418..8743fa6 100644 --- a/platform/mcp/compose.yaml +++ b/platform/mcp/compose.yaml @@ -191,7 +191,7 @@ services: build: context: . dockerfile: Dockerfile.athena-operator - image: mike-ai/mcp-athena-operator:2.3.1 + image: mike-ai/mcp-athena-operator:2.3.2 container_name: mike-ai-mcp-athena-operator environment: ATHENA_OPERATOR_SOCKET: /operator/operator.sock diff --git a/platform/operator/athena_operatord.py b/platform/operator/athena_operatord.py index 989c98f..84f4191 100755 --- a/platform/operator/athena_operatord.py +++ b/platform/operator/athena_operatord.py @@ -28,7 +28,7 @@ from pathlib import Path from typing import Any -VERSION = "2.3.1" +VERSION = "2.3.2" STACK = Path(os.environ.get("ATHENA_OPERATOR_STACK", "/opt/mike-ai/stack")).resolve() REPOSITORY = Path(os.environ.get("ATHENA_OPERATOR_REPOSITORY", "/data/mike-ai-operator/repository")).resolve() STATE = Path(os.environ.get("ATHENA_OPERATOR_STATE", "/data/mike-ai-operator/state")).resolve() @@ -102,10 +102,16 @@ def compact(text: str) -> str: def run(argv: list[str], *, cwd: Path = STACK, timeout: int = 900, check: bool = False) -> dict[str, Any]: + # The systemd service deliberately exposes /root read-only. Docker Buildx + # still needs a tiny writable activity/config directory, so keep that + # disposable state inside the operator's dedicated state tree. + docker_config = STATE / "docker-config" + docker_config.mkdir(parents=True, exist_ok=True) environment = { "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "LANG": "C.UTF-8", - "HOME": "/root", + "HOME": str(STATE), + "DOCKER_CONFIG": str(docker_config), } git_key = Path(os.environ.get("ATHENA_OPERATOR_GIT_SSH_KEY", "/etc/mike-ai/athena-operator-git")) known_hosts = Path(os.environ.get("ATHENA_OPERATOR_GIT_KNOWN_HOSTS", "/etc/mike-ai/athena-operator-known-hosts"))