dpojoxa5613 2019-05-20 14:28
浏览 293
已采纳

带有Go的Dockerfile找不到路径

I have an issue getting my local build to run as well as getting my Dockerfile configured.

My project structure looks like:

project
- cmd
  main.go
- internal
  - app
    app.go
Dockerfile

So, in main.go I say

import (
    "project/internal/app"
)

Then, when I say go build I can run locally perfectly.

However, in my Dockerfile I say

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

And I get the issue:

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)

Why is Docker adding src to the GOPATH? And how can I configure it to look in the right spot?

If I change my main.go to be a relative path I can hack a fix - but then I can't run locally as I get

main.go:4:2: local import "../internal/app" in non-local package

Any and all help would be really appreciated.

  • 写回答

1条回答 默认 最新

  • dqy27359 2019-05-20 14:35
    关注

    By default Go expects to find folders like src, pkg and bin within GOPATH. However, you're pointing it into in fact your project folder. To fix it you just need to point your GOPATH into /go.

    So your Dockerfile should look like

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

    You can find more information on GOPATH here. If you're tired of GOPATH you can give a try to gomodules

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 QT C++ 鼠标键盘通信
  • ¥15 改进Yolov8时添加的注意力模块在task.py里检测不到
  • ¥50 高维数据处理方法求指导
  • ¥100 数字取证课程 关于FAT文件系统的操作
  • ¥15 如何使用js实现打印时每页设置统一的标题
  • ¥15 安装TIA PortalV15.1报错
  • ¥15 能把水桶搬到饮水机的机械设计
  • ¥15 Android Studio中如何把H5逻辑放在Assets 文件夹中以实现将h5代码打包为apk
  • ¥15 使用小程序wx.createWebAudioContext()开发节拍器
  • ¥15 关于#爬虫#的问题:请问HMDB代谢物爬虫的那个工具可以提供一下吗