services: diagnostic: image: nvcr.io/nvidia/pytorch:25.12-py3 network_mode: host gpus: all volumes: - /:/host:ro - ./diagnostics:/diagnostics command: - /bin/bash - -lc - | set -uo pipefail exec > /diagnostics/report.txt 2>&1 echo "timestamp=$$(date -u +%FT%TZ)" echo "hostname=$$(cat /host/etc/hostname 2>/dev/null || true)" echo "lan_ipv4=$$(hostname -I 2>/dev/null || true)" python3 - <<'PY' import socket for port in range(18120, 18130): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.bind(('0.0.0.0', port)) print(f'port_{port}=free') except OSError as exc: print(f'port_{port}=busy:{exc.errno}') finally: sock.close() PY echo '--- nvidia-smi ---' nvidia-smi echo '--- cuda/python ---' python3 - <<'PY' import torch print('torch=' + torch.__version__) print('cuda_available=' + str(torch.cuda.is_available())) if torch.cuda.is_available(): print('gpu_name=' + torch.cuda.get_device_name(0)) print('gpu_total_bytes=' + str(torch.cuda.get_device_properties(0).total_memory)) PY echo '--- target directories ---' for path in /host/mnt/user/appdata/tail2-pose-server /host/mnt/user/appdata/tail2-pose-server-v1; do if [ -e "$$path" ]; then stat -c '%A %a %u:%g %n' "$$path" find "$$path" -mindepth 1 -maxdepth 2 -printf '%M %u:%g %p\n' | head -100 else echo "missing $$path" fi done echo '--- NDI runtime candidates ---' find /host/usr /host/opt /host/mnt/user/appdata -xdev \( -iname 'libndi.so*' -o -iname '*ndi*runtime*' -o -iname 'Processing.NDI.Lib.h' \) -print 2>/dev/null | head -200 echo '--- camera reachability ---' python3 - <<'PY' import socket print('camera_tcp_probe_only=192.168.50.207') for port in (80, 443, 5960, 5961): s = socket.socket() s.settimeout(1) try: rc = s.connect_ex(('192.168.50.207', port)) finally: s.close() print(f'camera_port_{port}_connect_ex={rc}') PY