dpca31461 2017-10-22 15:02
浏览 70

Docker构建因本地go软件包导入而失败

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条回答 默认 最新

  • duanping2809 2017-10-22 15:15
    关注

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

报告相同问题?

悬赏问题

  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入