commit
2ef4de324c
3 changed files with 85 additions and 0 deletions
@ -0,0 +1,22 @@ |
|||||
|
# syntax=docker/dockerfile:1 |
||||
|
FROM alpine:3.20 |
||||
|
|
||||
|
# Install minimal tooling |
||||
|
RUN apk add --no-cache \ |
||||
|
bash curl ca-certificates \ |
||||
|
docker-cli inotify-tools procps \ |
||||
|
busybox-extras iputils \ |
||||
|
wakeonlan ethtool |
||||
|
|
||||
|
# Copy script |
||||
|
WORKDIR /app |
||||
|
COPY scripts/auto-boot-ollama-pc.sh /usr/local/bin/auto-boot-ollama-pc.sh |
||||
|
RUN chmod +x /usr/local/bin/auto-boot-ollama-pc.sh |
||||
|
|
||||
|
# Environment defaults (can be overridden by compose/Komodo) |
||||
|
ENV CONTAINER_NAME=paperless-ai \ |
||||
|
OLLAMA_HOST=192.168.222.12 \ |
||||
|
OLLAMA_PORT=11434 \ |
||||
|
SINCE=0s |
||||
|
|
||||
|
ENTRYPOINT ["/usr/local/bin/auto-boot-ollama-pc.sh"] |
||||
@ -0,0 +1,20 @@ |
|||||
|
services: |
||||
|
auto-boot-ollama-host: |
||||
|
build: . |
||||
|
container_name: auto-boot-ollama-host |
||||
|
environment: |
||||
|
# customize as needed |
||||
|
CONTAINER_NAME: "paperless-ai" |
||||
|
OLLAMA_HOST: "192.168.222.12" |
||||
|
OLLAMA_PORT: "11434" |
||||
|
SINCE: "0s" |
||||
|
# WOL_MAC: "AA:BB:CC:DD:EE:FF" |
||||
|
volumes: |
||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro |
||||
|
restart: unless-stopped |
||||
|
# Optional: network if you need special routing to OLLAMA_HOST |
||||
|
# networks: |
||||
|
# - hostnet |
||||
|
# networks: |
||||
|
# hostnet: |
||||
|
# external: true |
||||
@ -0,0 +1,43 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
set -euo pipefail |
||||
|
# Purpose: Watch docker logs of a host container and react to an error pattern. |
||||
|
# Notes: |
||||
|
# - This runs *inside* a container with /var/run/docker.sock mounted. |
||||
|
# - Requires docker CLI inside this container. |
||||
|
|
||||
|
# ---- Config via env (with sane defaults) ---- |
||||
|
CONTAINER_NAME="${CONTAINER_NAME:-paperless-ai}" |
||||
|
OLLAMA_HOST="${OLLAMA_HOST:-192.168.222.12}" |
||||
|
OLLAMA_PORT="${OLLAMA_PORT:-11434}" |
||||
|
ERROR_PATTERN="${ERROR_PATTERN:-Error: \\[ERROR\\] Document analysis failed: connect EHOSTUNREACH ${OLLAMA_HOST}:${OLLAMA_PORT}}" |
||||
|
|
||||
|
DOCKER_CLI="${DOCKER_CLI:-docker}" # docker CLI binary name |
||||
|
WOL_CMD="${WOL_CMD:-wakeonlan}" # or "etherwake -i eth0 $WOL_MAC" |
||||
|
NC_CMD="${NC_CMD:-nc}" # netcat |
||||
|
WOL_MAC="${WOL_MAC:-}" # optional: MAC to WOL |
||||
|
SINCE="${SINCE:-0s}" # logs window (e.g., 5m) |
||||
|
|
||||
|
log() { printf '[%(%F %T)T] %s\n' -1 "$*"; } |
||||
|
|
||||
|
# Basic pre-flight: show which container is watched |
||||
|
log "Watching logs for container='${CONTAINER_NAME}' since='${SINCE}'" |
||||
|
log "Looking for pattern: ${ERROR_PATTERN}" |
||||
|
|
||||
|
# Stream logs and parse |
||||
|
"${DOCKER_CLI}" logs -f --since "${SINCE}" "${CONTAINER_NAME}" 2>&1 | \ |
||||
|
while IFS= read -r line; do |
||||
|
# echo "$line" # uncomment for debugging |
||||
|
if echo "$line" | grep -qE "${ERROR_PATTERN}"; then |
||||
|
log "Detected EHOSTUNREACH for Ollama (${OLLAMA_HOST}:${OLLAMA_PORT})." |
||||
|
# --- remediation examples (optional) --- |
||||
|
# if [[ -n "$WOL_MAC" ]]; then |
||||
|
# log "Sending WOL to ${WOL_MAC}" |
||||
|
# $WOL_CMD "$WOL_MAC" || true |
||||
|
# fi |
||||
|
# until $NC_CMD -z "$OLLAMA_HOST" "$OLLAMA_PORT"; do |
||||
|
# log "Waiting for Ollama to be reachable..." |
||||
|
# sleep 2 |
||||
|
# done |
||||
|
# log "Ollama reachable again." |
||||
|
fi |
||||
|
done |
||||
Loading…
Reference in new issue