-2

与我的本地机器相比,在 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
4

1 回答 1

0

从您发布这篇文章之日起,我认为您正在 Docker 中运行 go >= 1.16.0,这对模块系统进行了一些更改(如 @JimB 评论参见golang.org/doc/go1.16#go-command更改去安装和去获取)。您可能正在您的机器上运行旧版本的 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

于 2021-03-16T18:28:14.720 回答