我构建了一个go应用程序,它有一个主包和一个身份验证包。身份验证包导入主文件中。目录结构如下,
和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。提供以下错误输出,
如何修复此错误并使本地身份验证包包含在构建中?或者还有其他更好的方法来编写dockerfile以进行正确的构建吗?
非常感谢任何帮助。
答案 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" ]