![](/img/trans.png)
[英]Docker build : "go: go.mod file not found in current directory or any parent directory"
[英]Error go.mod: no such file or directory Compiler docker compose local package
当我使用 docker 构建具有本地依赖项的应用程序以创建 docker 映像时,我遇到了问题。
我的 Dockerfile:
FROM golang:alpine AS build
ENV GOPATH=$GOPATH
#GOPROXY
ENV GOPROXY=http://proxy.golang.org
ENV GO111MODULE=on
WORKDIR $GOPATH/src/github.com/julianskyline/motorcars-core-business
COPY . .
# Set OS as linux
RUN GOOS=linux go build -o $GOPATH/bin/github.com/julianskyline/motorcars-core-business main.go
FROM alpine
COPY --from=build $GOPATH/bin/github.com/julianskyline/motorcars-core-business $GOPATH/bin/github.com/julianskyline/motorcars-core-business
ENTRYPOINT [ "/go/bin/motorcars-core-business" ]
My go.mod
module github.com/julianskyline/motorcars-core-business
go 1.15
replace (
github.com/julianskyline/errors => /home/julianmarin/proyectos/go/src/github.com/julianskyline/errors
github.com/julianskyline/motorcars-db => /home/julianmarin/proyectos/go/src/github.com/julianskyline/motorcars-db
github.com/julianskyline/motorcars-models => /home/julianmarin/proyectos/go/src/github.com/julianskyline/motorcars-models)
项目位于同一文件夹中:
$GOPATH/src/github.com/julianskyline/errors $GOPATH/src/github.com/julianskyline/motorcars-core-business
go 构建/运行正常。
错误 sudo docker-compose 构建:
Step 6/9 : RUN GOOS=linux go build -o $GOPATH/bin/github.com/julianskyline/motorcars-core-business main.go
---> Running in 45227441dfdd
go: github.com/julianskyline/errors@v0.0.0-00010101000000-000000000000 (replaced by /home/julianmarin/proyectos/go/src/github.com/julianskyline/errors): reading /home/julianmarin/proyectos/go/src/github.com/julianskyline/errors/go.mod: open /home/julianmarin/proyectos/go/src/github.com/julianskyline/errors/go.mod: no such file or directory
The command '/bin/sh -c GOOS=linux go build -o $GOPATH/bin/github.com/julianskyline/motorcars-core-business main.go' returned a non-zero code: 1
ERROR: Service 'api' failed to build
注意:文件 /home/julianmarin/proyectos/go/src/github.com/julianskyline/errors/go.mod 存在!
Dockerfile
在$GOPATH/src/github.com/julianskyline/motorcars-core-business
这意味着COPY. .
COPY. .
其中只会将$GOPATH/src/github.com/julianskyline/motorcars-core-business
复制到 docker 图像中。
go.mod
包含引用不在$GOPATH/src/github.com/julianskyline/motorcars-core-business
下的文件夹的replace
指令(例如$GOPATH/src/github.com/julianskyline/errors
); 这会导致编译错误,因为 docker 映像中不存在这些文件夹。
要解决此问题,您可以:
julianskyline
文件夹复制到图像中(通过将Docker
文件移动到父文件夹中, 在命令行上指定上下文或使用docker-compose
)。replace
指令并让go
从 github 中提取文件。按照评论中的要求发布答案; 我相信这些评论为 OP 提供了足够的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.