#go
#Вперед
Вопрос:
У меня есть проект, который я обновил FROM golang:1.9-alpine
до FROM golang:1.12-alpine
, и теперь мой тест не выполняется. Теперь он говорит:
$ docker-compose exec bot go vet
# runtime/cgo
exec: "gcc": executable file not found in $PATH
Согласно документам для https://golang.org/doc/install/gccgo это компилятор. Почему я могу запустить свое приложение без этого, но оно не будет запускать тесты без него?Я просматривал журналы изменений и, должно быть, пропустил, где это описано.
Вот мой файл Dockerfile:
FROM golang:1.12-alpine
RUN mkdir /app
WORKDIR /app
ADD src/ /app
# Fetch application dependencies
RUN apk add --no-cache --update git
amp;amp; go get github.com/bwmarrin/discordgo
amp;amp; go get github.com/jonas747/dshardmanager
amp;amp; go get github.com/bugsnag/bugsnag-go
amp;amp; apk del git
# Build binary
RUN go build -o main .
CMD ["/app/main"]
Ответ №1:
Похоже, вы столкнулись с этой проблемой:https://github.com/golang/go/issues/26988
Предлагаемый обходной путь заключается в установке этих переменных среды при сборке:
CGO_ENABLED=0 GO111MODULE=off
Вы также можете предпочесть многоступенчатую сборку docker, чтобы ваш конечный образ docker был минимальным (например, не включая исходные файлы, из которых вы скомпилированы, и компилятор go). Пример из документации docker находится здесь: https://docs.docker.com/develop/develop-images/multistage-build /
Комментарии:
1. После некоторых экспериментов выясняется, что GO111MODULE=off не нужен (по крайней мере, в некоторых случаях; протестируйте в вашей среде).