I have built a go application which has a main package and an authentication package. The authentication package is imported in main file. The directory structure is as follows,
and the docker file contents are as follows,
FROM golang
COPY ./ /Users/venkat/go/src/github.com/Athavankanapuli/interflow_api/loginservice/app
WORKDIR /Users/venkat/go/src/github.com/Athavankanapuli/interflow_api/loginservice/app
RUN go get github.com/go-kit/kit/endpoint
RUN go get golang.org/x/oauth2
RUN go get github.com/go-kit/kit/endpoint
RUN go get gopkg.in/mgo.v2/bson
RUN go install ./...
RUN go build
EXPOSE 8080
CMD [ "./app" ]
The docker does all the imports properly but it fails to read the authentication package. The $GOPATH refers to /Users/venkat/go The terminal command docker build -t interflow . gives the following error output,
How to fix this error and make the local authentication package gets included in the build? Or is there any other better way of writing the dockerfile for the proper build?
The container and build environment will not have access to your laptop's environment variables. The documented way to use the image uses the /go/src directory:
I believe the above would work for you and would be the best option of all, though my go is a little rusty.
You could define the
$GOPATH
with anENV GOPATH=/Users/venkat/go
in your Dockerfile. However instead of setting the environment variable, I'd recommend instead using the value of the GOPATH assumed by the image: