Skip to content

Commit 5bc63d4

Browse files
committed
fix: add docker entrypoint to set appropriate defaults for env vars
1 parent fe53a60 commit 5bc63d4

3 files changed

Lines changed: 61 additions & 4 deletions

File tree

Dockerfile.alpine

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
FROM golang:1.24-alpine AS builder
2+
WORKDIR /src
3+
COPY . .
4+
RUN go build -o /docker-entrypoint cmd/docker-entrypoint/main.go
5+
16
FROM alpine:latest
27
LABEL org.opencontainers.image.source="https://github.com/garethgeorge/backrest"
38
RUN apk --no-cache add tini ca-certificates curl bash rclone openssh tzdata docker-cli
@@ -6,5 +11,7 @@ COPY backrest /backrest
611
RUN /backrest --install-deps-only
712
RUN mkdir -p /bin && mv /root/.local/share/backrest/restic /bin/restic
813

9-
ENTRYPOINT ["/sbin/tini", "--"]
10-
CMD ["/backrest", "--bind-address", ":9898"]
14+
COPY --from=builder /docker-entrypoint /docker-entrypoint
15+
16+
ENTRYPOINT ["/sbin/tini", "--", "/docker-entrypoint"]
17+
CMD ["/backrest"]

Dockerfile.scratch

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
FROM golang:1.24-alpine AS builder
2+
WORKDIR /src
3+
COPY . .
4+
RUN go build -o /docker-entrypoint cmd/docker-entrypoint/main.go
5+
16
FROM alpine:latest AS alpine
27
RUN apk add --no-cache ca-certificates tini-static
38
RUN mkdir /tmp-orig
@@ -13,5 +18,7 @@ COPY --from=alpine /bin /bin
1318
COPY --from=alpine /sbin/tini-static /tini
1419
COPY backrest /backrest
1520

16-
ENTRYPOINT ["/tini", "--"]
17-
CMD ["/backrest", "--bind-address", ":9898"]
21+
COPY --from=builder /docker-entrypoint /docker-entrypoint
22+
23+
ENTRYPOINT ["/tini", "--", "/docker-entrypoint"]
24+
CMD ["/backrest"]

cmd/docker-entrypoint/main.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"os/exec"
7+
)
8+
9+
var dockerEnvVarDefaults = map[string]string{
10+
"BACKREST_PORT": "0.0.0.0:9898",
11+
}
12+
13+
func main() {
14+
var defaultedVariables []string
15+
for key, value := range dockerEnvVarDefaults {
16+
if os.Getenv(key) == "" {
17+
os.Setenv(key, value)
18+
defaultedVariables = append(defaultedVariables, fmt.Sprintf("%s=%q", key, value))
19+
}
20+
}
21+
if len(defaultedVariables) > 0 {
22+
os.Stderr.WriteString("Setting docker defaults for env variables:\n")
23+
for _, key := range defaultedVariables {
24+
os.Stderr.WriteString(" - " + key + "\n")
25+
}
26+
}
27+
if len(os.Args) < 1 {
28+
os.Stderr.WriteString("No command provided to run.\n")
29+
os.Exit(1)
30+
}
31+
32+
cmd := exec.Command(os.Args[0], os.Args[1:]...)
33+
cmd.Stdout = os.Stdout
34+
cmd.Stderr = os.Stderr
35+
cmd.Stdin = os.Stdin
36+
37+
if err := cmd.Run(); err != nil {
38+
if exitError, ok := err.(*exec.ExitError); ok {
39+
os.Exit(exitError.ExitCode())
40+
}
41+
panic(err)
42+
}
43+
}

0 commit comments

Comments
 (0)