- poller/docker-entrypoint.sh: convert from CRLF+BOM to LF (UTF-8 no BOM) Windows saved the file with a UTF-8 BOM which made the Linux kernel reject the shebang with 'exec format error', crashing the poller. - infrastructure/openbao/init.sh: same CRLF -> LF fix - poller/Dockerfile: add sed to strip CRLF and BOM at image build time as a defensive measure for future Windows edits - docker-compose.override.yml: add 'restart: on-failure' to api and poller so they recover from the postgres startup race (TimescaleDB restarts postgres after initdb, briefly causing connection refused on first boot) - .gitattributes: enforce LF for all text/script/code files so git normalises line endings on checkout and prevents this class of bug
22 lines
1.0 KiB
Docker
22 lines
1.0 KiB
Docker
FROM golang:1.24-alpine AS builder
|
|
WORKDIR /build
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
COPY . .
|
|
# GOMAXPROCS=1 limits the Go compiler to one OS thread during the Docker build.
|
|
# Without this, go build spawns workers proportional to GOMAXPROCS (defaults to
|
|
# the host CPU count), which combined with the parallel Node and Python builds
|
|
# can saturate all cores and spike RAM on a 2-core / 2-4 GB server.
|
|
RUN CGO_ENABLED=0 GOOS=linux GOMAXPROCS=1 go build -o /poller ./cmd/poller
|
|
|
|
FROM alpine:3.21
|
|
RUN apk add --no-cache ca-certificates iproute2
|
|
COPY --from=builder /poller /usr/local/bin/poller
|
|
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
|
# Strip Windows CRLF line endings and make executable (safe even if already LF)
|
|
# Strip Windows CRLF and UTF-8 BOM if present (both break Linux shebang parsing)
|
|
RUN sed -i 's/\r//' /usr/local/bin/docker-entrypoint.sh && \
|
|
sed -i '1s/^\xef\xbb\xbf//' /usr/local/bin/docker-entrypoint.sh && \
|
|
chmod +x /usr/local/bin/docker-entrypoint.sh
|
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|