【问题标题】:Docker build fails with local go package importDocker 构建因本地 go 包导入而失败
【发布时间】:2017-10-22 15:02:40
【问题描述】:

我已经构建了一个 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 以进行正确的构建?

【问题讨论】:

  • 您是在构建/容器中设置$GOPATH,还是仅在您的笔记本电脑上设置?
  • 只在笔记本电脑上设置
  • @BMitch 即使我在 dockerfile 中使用 ENV GOPATH 设置了 $GOPATH ,也会遇到 fmt 等标准库包的导入错误

标签: docker go dockerfile


【解决方案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 中使用 ENV GOPATH=/Users/venkat/go 定义 $GOPATH。但是,我建议不要设置环境变量,而是使用图像假定的 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" ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2022-07-07
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多