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 怎么制作一个人脸识别门禁系统
  • ¥20 大华dss监控平台网络关闭登不进去
  • ¥15 请使用蚁群算法解决下列问题,并给出我完整的代码
  • ¥20 关于php录入完成后,批量更新数据库
  • ¥15 请教往复密封润滑问题
  • ¥15 cocos creator发布ios包
  • ¥15 comsol压电材料数据
  • ¥35 用python实现除法算法中goldschmidt算法
  • ¥15 汇编代码转换成C代码
  • ¥15 除法算法中的归一化具体是怎么变的?