带有Go的Dockerfile找不到路径

时间:2019-05-20 14:28:33

标签: 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/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

我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

默认情况下,Go希望在src中找到pkgbinGOPATH之类的文件夹。但是,实际上是将其指向项目文件夹。 要解决此问题,您只需将GOPATH指向/go

所以您的Dockerfile应该看起来像

FROM golang
ENV GOPATH /go
COPY . /go/src/github.com/project
WORKDIR /go/src/github.com/project
RUN make linux

您可以在GOPATH here上找到更多信息。 如果您对GOPATH感到厌倦,可以尝试尝试gomodules