猿问

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

我正在尝试使用以下命令构建一个 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 main


import "log"


func main() {

    log.Println("test")

}

Dockerfile:


FROM golang:1.13


ADD main.go .


RUN CGO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'


CMD [ "main" ]

docker 容器内的命令大约需要 5 秒,而我的电脑上的 <0.1 秒。


慕妹3242003
浏览 155回答 1
1回答

largeQ

在我看来,问题不在于容器本身。$ go clean$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'real&nbsp; &nbsp; 0m0,233suser&nbsp; &nbsp; 0m0,278ssys 0m0,094s$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'real&nbsp; &nbsp; 0m0,076suser&nbsp; &nbsp; 0m0,098ssys 0m0,053s$ go clean$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'real&nbsp; &nbsp; 0m0,238suser&nbsp; &nbsp; 0m0,315ssys 0m0,070s您可以在比较连续构建中看到构建在“清理”之后所花费的时间。概要 清理 [-i] [-r] [-n] [-x] [包]描述 清洁从包源目录中删除目标文件。go 命令在临时目录中构建大部分对象,因此 go clean 主要关注其他工具或手动调用 go build 留下的对象文件。https://manpages.debian.org/testing/golang-go/go-clean.1.en.html在每次尝试在您的计算机上构建时,您是否清除了构建文件夹?
随时随地看视频慕课网APP

相关分类

Go
我要回答