我在运行本地构建以及配置 Dockerfile 时遇到了问题。
我的项目结构如下:
project
- cmd
main.go
- internal
- app
app.go
Dockerfile
所以,在 main.go
中,我说
import (
"project/internal/app"
)
然后,当我说 go build
时,我可以在本地完美运行。
但是,在我的 Dockerfile 中我说
FROM golang
ENV GOPATH /go/src/github.com/project
COPY . /go/src/github.com/project
WORKDIR /go/src/github.com/project
RUN make linux
我明白了:
cmd/main.go:4:2: cannot find package "Slaxtract/internal/app" in any of:
/usr/local/go/src/project/internal/app (from $GOROOT)
/go/src/github.com/project/src/project/internal/app (from $GOPATH)
为什么 Docker 将 src
添加到 GOPATH?我如何配置它以在正确的位置查找?
如果我将 main.go
更改为相对路径,我可以破解一个修复程序 - 但我无法在本地运行,因为我得到了
main.go:4:2: local import "../internal/app" in non-local package
我们将不胜感激任何帮助。
最佳答案
默认情况下,Go 希望在 GOPATH
中找到 src
、pkg
和 bin
等文件夹。但是,您实际上是将它指向您的项目文件夹。
要修复它,您只需将 GOPATH
指向 /go
。
所以你的 Dockerfile
应该是这样的
FROM golang
ENV GOPATH /go
COPY . /go/src/github.com/project
WORKDIR /go/src/github.com/project
RUN make linux
关于带有Go的Dockerfile找不到路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56223019/