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

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

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错