Golang在Docker映像中找不到软件包

时间:2019-08-25 17:38:27

标签: docker go

因此,我正在尝试将golang应用程序与其他包含我的主文件补充代码的目录进行docker化。 我正在使用大猩猩/ 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)

1 个答案:

答案 0 :(得分:1)

尝试以下Docker文件:

# GO Repo base repo
FROM golang:1.12.0-alpine3.9 as builder

RUN apk add git

# Add Maintainer Info
LABEL maintainer="<>"

RUN mkdir /app
ADD . /app
WORKDIR /app

COPY go.mod go.sum ./

# Download all the dependencies
RUN go mod download

COPY . .

# Build the Go app
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

# GO Repo base repo
FROM alpine:latest

RUN apk --no-cache add ca-certificates curl

RUN mkdir /app

WORKDIR /app/

# Copy the Pre-built binary file from the previous stage
COPY --from=builder /app/main .

# Expose port 8000
EXPOSE 8000

# Run Executable
CMD ["./main"]

在这里,我们正在创建一个中间docker builder容器,将代码复制到其中,在builder容器中构建代码,然后将binary映像复制到实际的docker。 / p>

这将有助于使所有依赖项都包含在最终容器中,并且最终图像的大小将非常小