为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 在 Docker 镜像中找不到包

Golang 在 Docker 镜像中找不到包

Go
慕码人2483693 2023-07-17 14:37:02
因此,我尝试使用包含主文件补充代码的不同目录对 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/serverCOPY . .RUN go get -d github.com/gorilla/muxEXPOSE 8000CMD ["go","run","main.go"]我的 golang main.gopackage 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 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

尝试以下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。


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


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信