douzhi3454 2019-04-25 13:04
浏览 160

Golang Dockerfile:无法在Docker构建中找到软件包,但可以正常运行

I have the following dockerfile setup for a multistage build for my golang microservice project

FROM golang:alpine as builder

RUN apk --no-cache add git

WORKDIR /app/vessel-service

COPY . .

RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o vessel-service

# Second Stage

I have the following imports in my main.go

import (

  pb ""
  micro ""

where the vessel-service one is for the current project.

On running docker build -t vessel-service . I get the following error

Step 5/12 : RUN go mod download
 ---> Running in 1d0121039462
warning: pattern "all" matched no module dependencies
Removing intermediate container 1d0121039462
 ---> b66add421d26
Step 6/12 : RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o vessel-service
 ---> Running in ef50eff44a3b
main.go:9:3: cannot find package "" in any of:
  /usr/local/go/src/ (from $GOROOT)
  /go/src/ (from $GOPATH)
main.go:8:3: cannot find package "" in any of:
  /usr/local/go/src/ (from $GOROOT)
  /go/src/ (from $GOPATH)

But I do have ~/go/src/ On trying to just directly run main.go, it runs without any issues.

Is this an issue with my environment setup or is there something more to this?

Here's a summary of my go.mod


    go 1.12

    require (
      ... v1.1.0
    replace => v0.0.0-20190108154635-47c0da630f72

    replace => v0.5.1

    replace => v0.0.0-20190409202823-959b441ac422

    replace => v1.4.1
  • 写回答

1条回答 默认 最新

  • douxunwei7083 2019-04-25 16:00

    You need copy the go.mod file and go.sum files into the container and also set the ENV variable GO111MODULE to on like this: ENV GO111MODULE=on.

    A complete example Dockerfile:

    FROM golang:1.12
    ENV GO111MODULE=on
    ENV PORT=8090
    WORKDIR /app
    COPY go.mod .
    COPY go.sum .
    RUN go mod download
    COPY . .
    RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
    EXPOSE 8090
    ENTRYPOINT ["/app/your-app-name"] 

    If still it does not work, try changing the Golang version to a specific latest version like in the example above. I had the problem before with Golang version. But the error you are getting it's because of the go.mod file that does not exist in the container.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?



  • ¥15 求一下解题思路,完全不懂
  • ¥15 tensorflow
  • ¥15 densenet网络结构中,特征以cat方式复用后是怎么进行误差回传的
  • ¥15 STM32G471芯片spi设置了8位,总是发送16位
  • ¥15 R语言并行计算beta-NTI中tree文件的类型
  • ¥15 如何解读marsbar导出的ROI数据?
  • ¥20 求友友协助弄一下基于STC89C52单片机的声光控制灯原理图
  • ¥15 arduino双向交通灯设计
  • ¥15 有没有会粒子群算法的大能(○゜ε^○)求带不会出收敛图😭
  • ¥15 Matlab读取根元素出错