#!/usr/bin/env bash
# Real demos for P099 "How to Fix Docker Compose Containers That Can't Talk to Each Other". Runs on render01.
# One container, ce-p099-laptop (Ana's laptop): a stock Ubuntu 24.04 with systemd as PID 1 and Ubuntu's own
# Docker and Compose (docker.io, docker-compose-v2; lab/laptop/Dockerfile), run --privileged with its own cgroup
# namespace and fresh volumes, so its Docker starts empty (P077). The shop's two images (Ana's app, built from
# lab/app, and postgres:18-alpine) are built or pulled on render01 and loaded into the laptop off-screen, so the
# laptop needs no internet. Inside it Ana runs her tea shop with Docker Compose (lab/shop, lab/reports) and hits
# four real reasons containers can't reach each other. Every command shown is typed into a real login shell in a
# pty (demo_driver.py).
set -euo pipefail
cd "$(dirname "$0")"
P=ce-p099
cleanup() { docker rm -f -v $P-laptop >/dev/null 2>&1 || true; }
cleanup
[ -n "${KEEP:-}" ] || trap cleanup EXIT
docker build -q -t $P-laptop lab/laptop >/dev/null
docker build -q -t teashop:1 lab/app >/dev/null
docker pull -q postgres:18-alpine >/dev/null
# pyte (a VT100 screen in Python) rebuilds the final screen of Compose's live progress; render01's Python has no pip.
W=/tmp/$P && rm -rf $W && mkdir -p $W/py
docker run --rm -u "$(id -u):$(id -g)" -e HOME=/tmp -v $W/py:/out python:3.13-slim pip install -q --target /out pyte==0.8.2 >/dev/null 2>&1
docker run -d --name $P-laptop --hostname laptop --privileged --cgroupns=private \
  --tmpfs /run --tmpfs /run/lock -v /var/lib/docker -v /var/lib/containerd $P-laptop >/dev/null
for i in $(seq 60); do
  docker exec $P-laptop docker info >/dev/null 2>&1 && break; sleep 1
done
docker exec $P-laptop docker info >/dev/null
docker save teashop:1 postgres:18-alpine | docker exec -i $P-laptop docker load >/dev/null
docker cp lab/shop $P-laptop:/home/ana/shop
docker cp lab/reports $P-laptop:/home/ana/reports
docker exec $P-laptop chown -R ana:ana /home/ana/shop /home/ana/reports
PYTHONPATH=$W/py python3 - "$P-laptop" <demo_driver.py
