From 5bc63d4b9304b80315cda28dc7246c98e588d36c Mon Sep 17 00:00:00 2001 From: Gareth George Date: Sat, 28 Jun 2025 16:02:58 -0700 Subject: [PATCH] fix: add docker entrypoint to set appropriate defaults for env vars --- Dockerfile.alpine | 11 +++++++-- Dockerfile.scratch | 11 +++++++-- cmd/docker-entrypoint/main.go | 43 +++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 cmd/docker-entrypoint/main.go diff --git a/Dockerfile.alpine b/Dockerfile.alpine index 307eef6..7796112 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -1,3 +1,8 @@ +FROM golang:1.24-alpine AS builder +WORKDIR /src +COPY . . +RUN go build -o /docker-entrypoint cmd/docker-entrypoint/main.go + FROM alpine:latest LABEL org.opencontainers.image.source="https://github.com/garethgeorge/backrest" RUN apk --no-cache add tini ca-certificates curl bash rclone openssh tzdata docker-cli @@ -6,5 +11,7 @@ COPY backrest /backrest RUN /backrest --install-deps-only RUN mkdir -p /bin && mv /root/.local/share/backrest/restic /bin/restic -ENTRYPOINT ["/sbin/tini", "--"] -CMD ["/backrest", "--bind-address", ":9898"] +COPY --from=builder /docker-entrypoint /docker-entrypoint + +ENTRYPOINT ["/sbin/tini", "--", "/docker-entrypoint"] +CMD ["/backrest"] diff --git a/Dockerfile.scratch b/Dockerfile.scratch index cd11f9c..6dc8ae6 100644 --- a/Dockerfile.scratch +++ b/Dockerfile.scratch @@ -1,3 +1,8 @@ +FROM golang:1.24-alpine AS builder +WORKDIR /src +COPY . . +RUN go build -o /docker-entrypoint cmd/docker-entrypoint/main.go + FROM alpine:latest AS alpine RUN apk add --no-cache ca-certificates tini-static RUN mkdir /tmp-orig @@ -13,5 +18,7 @@ COPY --from=alpine /bin /bin COPY --from=alpine /sbin/tini-static /tini COPY backrest /backrest -ENTRYPOINT ["/tini", "--"] -CMD ["/backrest", "--bind-address", ":9898"] +COPY --from=builder /docker-entrypoint /docker-entrypoint + +ENTRYPOINT ["/tini", "--", "/docker-entrypoint"] +CMD ["/backrest"] diff --git a/cmd/docker-entrypoint/main.go b/cmd/docker-entrypoint/main.go new file mode 100644 index 0000000..1583bdb --- /dev/null +++ b/cmd/docker-entrypoint/main.go @@ -0,0 +1,43 @@ +package main + +import ( + "fmt" + "os" + "os/exec" +) + +var dockerEnvVarDefaults = map[string]string{ + "BACKREST_PORT": "0.0.0.0:9898", +} + +func main() { + var defaultedVariables []string + for key, value := range dockerEnvVarDefaults { + if os.Getenv(key) == "" { + os.Setenv(key, value) + defaultedVariables = append(defaultedVariables, fmt.Sprintf("%s=%q", key, value)) + } + } + if len(defaultedVariables) > 0 { + os.Stderr.WriteString("Setting docker defaults for env variables:\n") + for _, key := range defaultedVariables { + os.Stderr.WriteString(" - " + key + "\n") + } + } + if len(os.Args) < 1 { + os.Stderr.WriteString("No command provided to run.\n") + os.Exit(1) + } + + cmd := exec.Command(os.Args[0], os.Args[1:]...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Stdin = os.Stdin + + if err := cmd.Run(); err != nil { + if exitError, ok := err.(*exec.ExitError); ok { + os.Exit(exitError.ExitCode()) + } + panic(err) + } +}