13

I want to build a Go 1.9.2 binary and run it on the Docker Alpine image. The Go code I wrote doesn't call any C code. It also uses the net package. Unfortunately it hasn't been as simple as it sounds as Go doesn't seem to quite build static binaries all the time. When I try to execute the binary I often get cryptic messages for why the binary didn't execute. There's quite a bit of information on the internet about this but most of it ends up with people using trial an error to make their binaries work.

So far I have found the following works, however I don't know why, if it is optimal or if it could be simplified.

env GOOS=linux GARCH=amd64 go install -v -a -tags netgo -installsuffix netgo -ldflags "-linkmode external -extldflags -static"

What is the canonical way (if it exists) to build a Go binary that will run on the Alpine 3.7 docker image? I am happy to use apk to install packages to the Alpine image if that would make things more efficient/easier. (Believe I need to install ca-certificates anyway.)

1 Answer 1

12

Yes, you often need to add extra resource files like certificates especially when using a minimal distribution like alpine but the fact that you can run go applications on such small distributions is often also seen as an advantage.

To add the certificates this is a really good explanation outlining how to do it on a scratch container:

https://blog.codeship.com/building-minimal-docker-containers-for-go-applications/

If you would rather stick with alpine then you can install this package to get them:

https://pkgs.alpinelinux.org/package/v3.7/main/x86/ca-certificates

Sign up to request clarification or add additional context in comments.

2 Comments

The first link helped a lot. This seems sufficient env GOOS=linux GARCH=amd64 CGO_ENABLED=0 go install -v -a -installsuffix cgo. The Github issue at github.com/golang/go/issues/9344#issuecomment-69944514 shows the solution also.
Alpine v3.3 is three years old and not supported anymore. You should link the recent version, which is pkgs.alpinelinux.org/package/v3.7/main/x86/ca-certificates.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.