带有Go的Dockerfile找不到路径

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

我们将不胜感激任何帮助。

最佳答案

默认情况下,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 上找到更多信息 here . 如果你厌倦了 GOPATH 你可以试试 gomodules

关于带有Go的Dockerfile找不到路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56223019/

相关文章:

go - OpenShift API - 无法使用配置

testing - 在 jenkins 项目上构建许多 dockerfile

带有 Solaris 操作系统的 Docker 基础镜像

postgresql - 使用 Gorm 插入和选择 PostGIS 几何

go - 在运行时确定结构时进行 JSON Unmarshal

go - 无法通过 golang 获取 Uname

Docker nginx proxy_pass - 上游连接被拒绝

docker - 镜像和存储库有什么区别?

amazon-web-services - 我可以通过挂载目录向 sbt-native-packager 构建的本地 Docker 容器提供 AWS 凭证吗

pointers - 扫描不工作