我正在尝试使用以下命令构建一个 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
在每次尝试在您的计算机上构建时,您是否清除了构建文件夹?
- 1 回答
- 0 关注
- 154 浏览
添加回答
举报
0/150
提交
取消