登录
首页 >  Golang >  Go问答

docker 容器上的“go get”意外行为

来源:stackoverflow

时间:2024-04-30 13:51:36 125浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《docker 容器上的“go get”意外行为》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

与我的本地计算机相比,在 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/[email protected]

解决方案


从您发布本文之日起,我认为您正在 docker 内运行 go >= 1.16.0,这对模块系统引入了一些更改(如 @jimb 评论:请参阅 golang.org/doc/go1.16#go-command 有关 go install 和 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 内代码的图像。

本篇关于《docker 容器上的“go get”意外行为》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>