Reputation: 913
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
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