Golang,Docker,外部包,找不到路径

Joe*_*Joe 0 go docker

我的码头档案:

FROM golang:1.14
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
Run Code Online (Sandbox Code Playgroud)

错误:

main.go:11:2: cannot find package "github.com/gorilla/mux" in any of:
        /usr/local/go/src/github.com/gorilla/mux (from $GOROOT)
        /go/src/github.com/gorilla/mux (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)

我在 GOPATH 中的路径是

GOPATH=/Users/pstrom/go
Run Code Online (Sandbox Code Playgroud)

我来自 javascript 背景,在那里运行NPM INSTALL,它将所有外部包添加到node_modules与项目相同的目录中的目录中。

Go中有没有类似的命令?找不到任何。我不想在 docker 中添加任何 PATH,因为我想从任何地方运行它。

如何在 Go 中处理 Docker 中的外部包?

Daz*_*kin 5

也看评论。

您可能需要创建一个go.mod功能类似于package.json. 如果您没有go.mod文件但只想开始使用,您可以go mod init x在目录中与main.go和一起Dockerfile。然后,要强制将包添加到go.mod,您可以只go run .(或go run main.go)。

然后:

FROM golang:1.15

WORKDIR /app

COPY go.mod .
RUN go mod download

COPY . .

RUN go build -o main .
ENTRYPOINT ["/app/main"]
Run Code Online (Sandbox Code Playgroud)
  • 我建议撞到 Go 1.15
  • WORKDIR 如果不存在则创建目录,因此您可以跳过 mkdir
  • /app是之外${GOPATH}使用模块时,这是正确的
  • COPY>> ADD(我的偏好)
  • go mod download 获取定义的依赖项 go.mod
  • COPY . . 其他一切,可能只需要 COPY main.go .
  • ENTRYPOINT>>CMD并且容器将默认运行您的二进制文件