'go get' docker 容器上的意外行为



与我的本地机器相比,我在docker容器中运行go get [module]时出现了意外行为,如果能帮助我理解这种不同行为的原因,我将不胜感激。

1( 本地机器

命令:

go get github.com/axw/gocov/gocov

结果:

  • $GOPATH/bin包含可执行gocov
  • 该模块已下载到$GOPATH/src/github.com/axw/gocov/gocov
  • $GOPATH/pkg不包含任何与gocov软件包相关的内容

2(Docker容器

Dockerfile:

这个dockerfile用于测试目的,因为它没有入口点。

FROM golang:alpine
COPY .  /app
WORKDIR /app
RUN go get -v -u github.com/axw/gocov/gocov
RUN ls $GOPATH/bin
RUN ls -laR / | grep "^/.*gocov.*$"

结果:

  • $GOPATH/bin包含可执行gocov
  • $GOPATH/src不包含任何与gocov包相关的内容
  • 该模块已下载到$GOPATH/pkg/mod/github.com/axw中/gocov@v1.0.0

从你发布这篇文章的日期起,我认为你正在运行go>=Docker内部的1.16.0,对模块系统进行了一些更改(比如@JimB评论道:请参阅golang.org/doc/go1.16#go命令中的更改以进行安装和获取(。您的计算机上可能正在运行旧版本的go。

您可以使用以下Dockerfile:进行验证

FROM golang:1.15
COPY .  /app
WORKDIR /app
RUN go get -v -u github.com/axw/gocov/gocov
RUN ls $GOPATH/bin
RUN ls -laR / | grep "^/.*gocov.*$"

这将创建一个包含$GOPATH/src内部代码的图像。

相关内容

  • 没有找到相关文章

最新更新