Golang 在 Docker 镜像中找不到包

因此,我尝试使用包含主文件补充代码的不同目录对 golang 应用程序进行 dockerize。我正在使用gorilla/mux。目录结构如下所示。


$GOPATH/src/github.com/user/server

  |--- Dockerfile 

  |--- main.go 

  |--- routes/ 

         handlers.go 

  |--- public/ 

         index.gohtml 

它在我的主机上运行没有问题。问题是,当我尝试部署 docker 映像时,它不会运行并在创建后不久退出。我尝试将dockerfile 中的WORKDIR命令更改为/go/src并将所有文件转储到那里,但仍然没有成功。我还尝试了docker hub上的官方文档。也不行。


我的 Dockerfile。


FROM golang:latest  

WORKDIR /go/src/github.com/user/server

COPY . .

RUN go get -d github.com/gorilla/mux


EXPOSE 8000

CMD ["go","run","main.go"]

我的 golang main.go


package main 


import (

    "github.com/gorilla/mux"

    "github.com/user/server/routes"

    "log"

    "net/http"

    "time"

)

func main(){

  //... 

}

当我检查 docker 映像的日志时,我收到此错误消息。


错误信息


main.go:5:2: cannot find package "github.com/user/server/routes" in any of:

    /usr/local/go/src/github.com/user/server/routes (from $GOROOT)

    /go/src/github.com/user/server/routes (from $GOPATH)


慕码人2483693
浏览 135回答 1
1回答

qq_遁去的一_1

尝试以下Docker文件:# GO Repo base repoFROM golang:1.12.0-alpine3.9 as builderRUN apk add git# Add Maintainer InfoLABEL maintainer="<>"RUN mkdir /appADD . /appWORKDIR /appCOPY go.mod go.sum ./# Download all the dependenciesRUN go mod downloadCOPY . .# Build the Go appRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .# GO Repo base repoFROM alpine:latestRUN apk --no-cache add ca-certificates curlRUN mkdir /appWORKDIR /app/# Copy the Pre-built binary file from the previous stageCOPY --from=builder /app/main .# Expose port 8000EXPOSE 8000# Run ExecutableCMD ["./main"]在这里,我们创建一个中间docker builder容器,将代码复制到其中,在builder容器内构建代码,然后将binary映像复制到实际的 docker。这将有助于在最终容器中包含所有依赖项,而且最终图像的大小将非常小
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go