尝试用 docker 部署个简单的 go 应用, 然后发现 build 不起来. 因为一些神秘力量, 会出现类似下面的一些错误信息.

unrecognized import path “cloud.google.com/go”

unrecognized import path “golang.org/x/sync”

i/o timeout

想着总不能在服务器上用神秘的方式去解决这股力量吧 = 。 =

幸好 go 1.11 的 modules 功能可以启用 vendor 模式

go mod vendor

这样, 本地拉好相关依赖就可以了. DockerfileRUN 命令后面加 -mod vendor

1
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -mod vendor

或者还有一种办法, 比如:

如果报错

1
go: golang.org/x/sys@v0.0.0-20180903190138-2b024373dcd9: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

可以用 go mod edit 把对应的源换成 github 的,

1
go mod edit -replace=golang.org/x/sys@v0.0.0-20180903190138-2b024373dcd9=github.com/golang/sys@v0.0.0-20180903190138-2b024373dcd9