我有一个问题,让我的本地构建运行以及配置了我的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
您可以在此处找到有关GOPATH
的更多信息。如果您厌倦了GOPATH
,可以尝试尝试gomodules