LivingRobot
LivingRobot

Reputation: 913

Dockerfile with Go can't find path

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.

Upvotes: 0

Views: 1979

Answers (1)

Bohdan Kostko
Bohdan Kostko

Reputation: 393

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

Upvotes: 2

Related Questions