# syntax=docker/dockerfile:1 # ---- Build stage ---- FROM golang:1.26-alpine AS builder WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . ARG VERSION=dev ARG COMMIT=unknown ARG BUILD_TIME=unknown RUN CGO_ENABLED=0 GOOS=linux go build \ -trimpath \ -ldflags "-w -s -X main.Version=${VERSION} -X main.Commit=${COMMIT} -X main.BuildTime=${BUILD_TIME}" \ -o /out/pgsql-broker \ ./cmd/broker # ---- Runtime stage ---- FROM alpine:3.22 RUN apk add --no-cache ca-certificates tzdata && \ addgroup -S broker && adduser -S -G broker -h /home/broker broker && \ mkdir -p /etc/pgsql-broker && \ chown -R broker:broker /etc/pgsql-broker COPY --from=builder /out/pgsql-broker /usr/local/bin/pgsql-broker USER broker WORKDIR /home/broker # broker.yaml is expected to be mounted at /etc/pgsql-broker/broker.yaml # (config.LoadConfig's default search path) -- no config is baked into the # image, since it holds database credentials. ENTRYPOINT ["pgsql-broker"] CMD ["start"]