为了账号安全,请及时绑定邮箱和手机立即绑定

在 docker 容器中构建比在根系统上慢得多

在 docker 容器中构建比在根系统上慢得多

Go
慕妹3242003 2022-05-18 15:40:57
我正在尝试使用以下命令构建一个 go 包:CGO_ENABLED=0 GOOS=linux go build -o bin/router -installsuffix cgo -ldflags '-w'这在我的电脑上大约需要 0.5 秒。docker 容器中的相同命令需要 45 秒。RUN CGO_ENABLED=0 GOOS=linux go build -o /app/router -installsuffix cgo -ldflags '-w' /build/src/global/router在本地我有 go 版本1.12.9 linux/amd64。docker 容器使用golang:1.13图像作为基础。我的猜测是 docker build 进程的可用 CPU 较少,但这是否有很大的不同?这个问题的原因可能是什么?这可以通过一个最小的示例重现:main.go:package mainimport "log"func main() {    log.Println("test")}Dockerfile:FROM golang:1.13ADD main.go .RUN CGO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'CMD [ "main" ]docker 容器内的命令大约需要 5 秒,而我的电脑上的 <0.1 秒。
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

在我看来,问题不在于容器本身。


$ go clean

$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'


real    0m0,233s

user    0m0,278s

sys 0m0,094s


$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'


real    0m0,076s

user    0m0,098s

sys 0m0,053s


$ go clean

$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'


real    0m0,238s

user    0m0,315s

sys 0m0,070s

您可以在比较连续构建中看到构建在“清理”之后所花费的时间。


概要 清理 [-i] [-r] [-n] [-x] [包]


描述 清洁


从包源目录中删除目标文件。go 命令在临时目录中构建大部分对象,因此 go clean 主要关注其他工具或手动调用 go build 留下的对象文件。


https://manpages.debian.org/testing/golang-go/go-clean.1.en.html


在每次尝试在您的计算机上构建时,您是否清除了构建文件夹?


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信