Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# ============================================================
# Stage 1: Build the picoclaw binary
# ============================================================
FROM golang:1.25-alpine AS builder

RUN apk add --no-cache git make

WORKDIR /src

# Cache dependencies
COPY go.mod go.sum ./
RUN go mod download

# Copy source and build
COPY . .
RUN make build

# ============================================================
# Stage 2: Minimal runtime image
# ============================================================
FROM alpine:3.23

RUN apk add --no-cache ca-certificates tzdata \
&& addgroup -S picoclaw \
&& adduser -S -G picoclaw -h /home/picoclaw picoclaw

ENV HOME=/home/picoclaw
ENV PICOCLAW_GATEWAY_HOST=0.0.0.0

WORKDIR /home/picoclaw

# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -q --spider http://localhost:18790/health || exit 1

# Copy binary and first-run entrypoint.
COPY --from=builder /src/build/picoclaw /usr/local/bin/picoclaw
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh \
&& mkdir -p /home/picoclaw/.picoclaw \
&& chown -R picoclaw:picoclaw /home/picoclaw

USER picoclaw

VOLUME ["/home/picoclaw/.picoclaw"]
EXPOSE 18790

ENTRYPOINT ["/entrypoint.sh"]