带有Go-can'的Dockerfile;我找不到路

带有Go-can'的Dockerfile;我找不到路,docker,go,Docker,Go,我在运行本地构建和配置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/pr

我在运行本地构建和配置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
,您可以尝试一下默认情况下,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
,您可以尝试一下

还请注意,使用此目录结构,您的Go包名称应以
“github.com/project/…”
@DavidMaze-package-name开头。您的意思是,使用此目录结构,您的Go包名称应以
“github.com/project/…”开头
@DavidMaze导入时的软件包名称是什么意思