Почему внезапные тесты требуют "gcc"? - PullRequest
2 голосов
/ 31 марта 2019

У меня есть проект, который я обновил 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 \
    && 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"]

1 Ответ

4 голосов
/ 31 марта 2019

Похоже, вы столкнулись с этой проблемой: https://github.com/golang/go/issues/26988

Предложенный обходной путь - установить эти переменные среды при сборке:

CGO_ENABLED=0 GO111MODULE=off

Вы также можете предпочесть многоэтапную сборку докера, чтобы ваш конечный образ докера был минимальным (например, не включая исходные файлы, из которых вы скомпилировали, и компилятор go). Пример из документации докера находится здесь: https://docs.docker.com/develop/develop-images/multistage-build/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...