带有 Go 的 Dockerfile 找不到路径



我有一个问题,让我的本地构建运行以及配置了我的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中找到srcpkgbin之类的文件夹。但是,实际上,您将其指向您的项目文件夹。要修复它,您只需要将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

最新更新