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

时间:2020-10-16 20:30:00

标签: docker go

我的dockerfile:

FROM golang:1.14
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]

错误:

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)

我在GOPATH中的PATH是

GOPATH=/Users/pstrom/go

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

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

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

1 个答案:

答案 0 :(得分:5)

也请参阅评论。

可能需要创建一个go.mod文件,其功能类似于package.json。如果您没有go.mod文件,而只想开始使用,可以在go mod init xmain.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"]
  • 我建议撞到Go 1.15
  • WORKDIR创建目录(如果不存在),因此您跳过mkdir
  • /app${GOPATH}之外,这在使用模块时是正确的
  • COPY >> ADD(我的偏爱)
  • go mod download获取在go.mod中定义的依赖项
  • COPY . .其他所有内容,可能只需要成为COPY main.go .
  • ENTRYPOINT >> CMD,容器将默认运行二进制文件