Docker build fails with local go package import

2019-09-21 11:35发布

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,

enter image description here

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,

enter image description here

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?

1条回答
Juvenile、少年°
2楼-- · 2019-09-21 12:01

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:

FROM golang:1.8

WORKDIR /go/src/app
COPY . .

RUN go-wrapper download   # "go get -d -v ./..."
RUN go-wrapper install    # "go install -v ./..."

CMD ["go-wrapper", "run"] # ["app"]

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 an ENV 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:

FROM golang:1.9

COPY .  /go/src/github.com/Athavankanapuli/interflow_api/loginservice/app
WORKDIR  /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" ]
查看更多
登录 后发表回答