Docker构建失败,本地go包导入

时间:2017-10-22 15:02:41

标签: docker go dockerfile

我构建了一个go应​​用程序,它有一个主包和一个身份验证包。身份验证包导入主文件中。目录结构如下,

enter image description here

和docker文件内容如下,

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" ]

docker正确执行所有导入,但无法读取身份验证包。 $ GOPATH 指的是 / Users / venkat / go 终端命令 docker build -t interflow。提供以下错误输出,

enter image description here

如何修复此错误并使本地身份验证包包含在构建中?或者还有其他更好的方法来编写dockerfile以进行正确的构建吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

容器和构建环境无法访问笔记本电脑的环境变量。 documented way to use the image使用/ go / src目录:

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"]

我相信上述内容对您有用,并且是最好的选择,尽管我的行为有点生疏。

您可以在Dockerfile中使用$GOPATH定义ENV GOPATH=/Users/venkat/go。但是,我建议使用图像假设的GOPATH值,而不是设置环境变量:

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" ]