feat(server): multi-stage Dockerfile that builds Go from source#19
Open
Flo5k5 wants to merge 1 commit intom5stack:mainfrom
Open
feat(server): multi-stage Dockerfile that builds Go from source#19Flo5k5 wants to merge 1 commit intom5stack:mainfrom
Flo5k5 wants to merge 1 commit intom5stack:mainfrom
Conversation
The previous Dockerfile assumed that the Go binary was already built on the host and copied into the build context before running docker build. That required a separate prep step, only worked when the host arch matched the target, and made the docker.sh pre-build shell mandatory. The multi-stage version compiles the server inside the image using golang:1.24-alpine, so a plain "docker build" works out of the box on any platform supported by the builder (amd64, arm64...). This is what lets a homelab node cross-build and run the server natively on Raspberry Pi without juggling pre-compiled binaries. Also: - build with -trimpath and stripped symbols for smaller images - install ca-certificates and tzdata in the runtime layer so TLS and timezone-aware logging work correctly - EXPOSE 12800 so compose tools and scanners see the port - run the binary via absolute path to remove the implicit ./ in CMD
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The previous Dockerfile assumed that the Go binary was already built on
the host and copied into the build context before running docker build.
That required a separate prep step, only worked when the host arch
matched the target, and made the docker.sh pre-build shell mandatory.
The multi-stage version compiles the server inside the image using
golang:1.24-alpine, so a plain "docker build" works out of the box on
any platform supported by the builder (amd64, arm64...). This is what
lets a homelab node cross-build and run the server natively on
Raspberry Pi without juggling pre-compiled binaries.
Also:
timezone-aware logging work correctly