Files
GoClaw/docker/Dockerfile.agent-worker

57 lines
2.4 KiB
Docker

# ─── Stage 1: Build ────────────────────────────────────────────────────────────
# Собираем agent-worker binary из исходников gateway/
FROM golang:1.23-alpine AS builder
WORKDIR /build
# Кэшируем зависимости отдельным слоем
COPY gateway/go.mod gateway/go.sum ./
RUN go mod download
# Копируем исходники
COPY gateway/ ./
# Собираем статически линкованный бинарь
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
go build -trimpath -ldflags="-s -w" \
-o agent-worker \
./cmd/agent-worker
# ─── Stage 2: Runtime ──────────────────────────────────────────────────────────
FROM alpine:3.21
# Runtime tools needed by the agent's tool executor:
# bash — shell_exec uses bash -c (falls back to sh)
# curl — http_request + docker socket API fallback in docker_exec
# wget — healthcheck
# jq — JSON processing in shell scripts
# python3 — docker_exec socket fallback (docker ps via API)
RUN apk add --no-cache \
ca-certificates \
tzdata \
bash \
curl \
wget \
jq \
python3
WORKDIR /app
COPY --from=builder /build/agent-worker /app/agent-worker
# Порт HTTP API агента (переопределяется через AGENT_PORT env)
EXPOSE 8001
# ── Healthcheck ──────────────────────────────────────────────────────────────
# Docker/Swarm будет проверять /health каждые 15 секунд
HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \
CMD wget -qO- http://localhost:${AGENT_PORT:-8001}/health || exit 1
# Required env vars (подставляются при деплое Swarm service):
# AGENT_ID — числовой ID агента из таблицы agents
# DATABASE_URL — mysql://user:pass@host:3306/goclaw
# LLM_BASE_URL — https://ollama.com/v1 или http://ollama:11434/v1
# LLM_API_KEY — ключ LLM провайдера
# AGENT_PORT — порт HTTP (default: 8001)
ENTRYPOINT ["/app/agent-worker"]