#!/bin/bash # every claim in the post comes from this output set -u cd "$(dirname "$0")" IMG=python:3.13-slim docker pull -q $IMG >/dev/null echo "== docker $(docker version --format '{{.Server.Version}}')" echo "== 1. one process, two PIDs" c=$(docker run -d $IMG python -c "import time; time.sleep(600)") echo "host PID: $(docker inspect -f '{{.State.Pid}}' $c)" echo "container PID 1 cmdline: $(docker exec $c cat /proc/1/cmdline | tr '\0' ' ')" echo "cgroup: $(docker exec $c cat /proc/1/cgroup)" docker rm -f $c >/dev/null echo "== 2. docker stop" stop() { # name, docker run args... local n=$1; shift c=$(docker run -d -v "$PWD/sig:/w" "$@") sleep 1.5 p1=$(docker exec $c cat /proc/1/cmdline | tr '\0' ' ') s=$(date +%s.%N 2>/dev/null || python3 -c 'import time;print(time.time())') s=$(python3 -c 'import time;print(time.time())') docker stop -t 10 $c >/dev/null e=$(python3 -c 'import time;print(time.time())') printf '%-34s PID1=[%s] stop=%.1fs exit=%s\n' "$n" "$p1" "$(python3 -c "print($e-$s)")" "$(docker inspect -f '{{.State.ExitCode}}' $c)" docker rm $c >/dev/null } stop "script, no exec" $IMG sh /w/start.sh stop "sh -c (shell form)" $IMG sh -c "python /w/app.py" stop "sh -c with two commands" $IMG sh -c "echo hi; python /w/app.py" stop "exec form, no handler" $IMG python /w/app.py stop "exec form + handler" -e HANDLE=1 $IMG python /w/app.py stop "--init, no handler" --init $IMG python /w/app.py # section 3 (build cache) lives in cache.sh: it needs a change BuildKit has never seen echo "== 4. memory limit" c=$(docker run -d --memory 128m --memory-swap 128m $IMG python -c " a=[] while True: a.append(bytearray(10_000_000)); print(len(a)*10, 'MB', flush=True)") docker wait $c >/dev/null echo "exit=$(docker inspect -f '{{.State.ExitCode}}' $c) oom=$(docker inspect -f '{{.State.OOMKilled}}' $c)" echo "last log lines:"; docker logs $c 2>&1 | tail -3 | sed 's/^/ /' docker rm $c >/dev/null