我正在尝试使用以下命令构建 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 构建过程的可用 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 秒。
小智 3
在我看来,问题不在于容器本身。
$ 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
您可以在比较连续构建中看到“清理”之后构建所需的时间。
概要 go clean [-i] [-r] [-n] [-x] [ 包 ]
描述 清洁
从包源目录中删除目标文件。go 命令在临时目录中构建大多数对象,因此 go clean 主要关注其他工具或手动调用 go build 留下的对象文件。
https://manpages.debian.org/testing/golang-go/go-clean.1.en.html
每次尝试在计算机上构建时,您是否都会清除构建文件夹?
| 归档时间: | 
 | 
| 查看次数: | 4608 次 | 
| 最近记录: |