我有一个项目,我将 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"]
最佳答案
您似乎遇到了这个问题: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/
关于go - 为什么 go 测试突然需要 "gcc"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55442155/