diff --git a/Dockerfile b/Dockerfile index 011ae40..476ff02 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,10 +3,8 @@ 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 + --repository=https://dl-cdn.alpinelinux.org/alpine/edge/testing wol \ + && apk add --no-cache bash curl ca-certificates # Copy script WORKDIR /app @@ -19,4 +17,4 @@ ENV CONTAINER_NAME=paperless-ai \ OLLAMA_PORT=11434 \ SINCE=0s -ENTRYPOINT ["/usr/local/bin/auto-boot-ollama-host.sh"] +ENTRYPOINT ["/usr/local/bin/auto-boot-ollama-host.sh"] \ No newline at end of file diff --git a/compose.yaml b/compose.yaml index 181358e..ed165a2 100644 --- a/compose.yaml +++ b/compose.yaml @@ -2,19 +2,16 @@ services: auto-boot-ollama-host: build: . container_name: auto-boot-ollama-host + network_mode: 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 + WOL_MAC: "AA:BB:CC:DD:EE:FF" # set this + #WOL_BCAST: "192.168.222.255" # optional (defaults unten) + #WOL_PORT: "9" # optional restart: unless-stopped - # Optional: network if you need special routing to OLLAMA_HOST - # networks: - # - hostnet -# networks: -# hostnet: -# external: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro \ No newline at end of file diff --git a/scripts/auto-boot-ollama-host.sh b/scripts/auto-boot-ollama-host.sh index 941d4db..4f347bf 100644 --- a/scripts/auto-boot-ollama-host.sh +++ b/scripts/auto-boot-ollama-host.sh @@ -11,14 +11,23 @@ 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}}" +WOL_MAC="${WOL_MAC:-}" +WOL_BCAST="${WOL_BCAST:-255.255.255.255}" +WOL_PORT="${WOL_PORT:-9}" + 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 "$*"; } +send_wol() { + # 'wol' can send to a specific broadcast IP and UDP port + wol -i "$WOL_BCAST" -p "$WOL_PORT" "$WOL_MAC" || true +} + + # Basic pre-flight: show which container is watched log "Watching logs for container='${CONTAINER_NAME}' since='${SINCE}'" log "Looking for pattern: ${ERROR_PATTERN}" @@ -29,6 +38,12 @@ 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})." + + # ... in your remediation block: + if [[ -n "$WOL_MAC" ]]; then + log "Sending WOL to $WOL_MAC via ${WOL_BCAST}:${WOL_PORT}" + send_wol + fi # --- remediation examples (optional) --- # if [[ -n "$WOL_MAC" ]]; then # log "Sending WOL to ${WOL_MAC}"