簡體   English   中英

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

[英]Golang cannot find package in Docker image

因此,我正在嘗試對具有不同目錄的golang應用程序進行docker化,該目錄包含主文件的補充代碼。 我正在使用大猩猩/木漿 目錄結構如下所示。

$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)

嘗試以下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。

這將有助於使所有依賴項都包含在最終容器中,並且最終映像的大小將非常小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM