与我的本地机器相比,我在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
内部代码的图像。