[英]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.