Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are go tests suddenly requiring "gcc"?

Tags:

go

I have a project that I upgraded FROM golang:1.9-alpine to FROM golang:1.12-alpine and now my test aren't running. It's now saying:

$ docker-compose exec bot go vet       
# runtime/cgo
exec: "gcc": executable file not found in $PATH

According to the docs for https://golang.org/doc/install/gccgo this is the compiler. How come I can run my app without this but it won't run tests without it? I've been looking through the change logs and must be missing where this is covered.

Here's my Dockerfile:

FROM golang:1.12-alpine
RUN mkdir /app
WORKDIR /app
ADD src/ /app

# Fetch application dependencies
RUN apk add --no-cache --update git \
    && go get github.com/bwmarrin/discordgo \
    && go get github.com/jonas747/dshardmanager \
    && go get github.com/bugsnag/bugsnag-go \
    && apk del git

# Build binary
RUN go build -o main .

CMD ["/app/main"]
like image 499
Webnet Avatar asked Mar 31 '19 14:03

Webnet


1 Answers

It looks like you're encountering this issue: https://github.com/golang/go/issues/26988

The workaround suggested is to set these environment variables when building:

CGO_ENABLED=0 GO111MODULE=off

You might also prefer a multi-stage docker build, so that your final docker image is minimal (for example, not including the source files you've compiled from, and the go compiler). An example from the docker documentation is here: https://docs.docker.com/develop/develop-images/multistage-build/

like image 104
Paul Hankin Avatar answered Nov 08 '22 18:11

Paul Hankin