.lock 文件在 Go 模块缓存中是一个经常引起我们问题的地方。以以下常见用例为例:当在构建 Docker 镜像的过程中将依赖项安装到 Docker 容器中时,这些依赖项自然地由 root
拥有,权限为 755。
然而,当在容器中运行 go build
时,用户此时不再是 root,因此会经常看到以下形式的错误:
../cmd/app/main.go:6:2: open /go/pkg/mod/cache/download/github.com/<user>/<repo>/@v/v1.9.0.lock: permission denied
因为这个 root-owned 文件显然对用户不可写。
我非常惊讶地发现这种类型的文件在任何地方都没有文档。我想建议,例如 this page 可以解释这些文件的目的和功能,以便了解此类错误,从而解决它们。或者,我也欢迎一个建议的工作流程变更,使这些文件不再成为问题,这样它们就可以成为用户可以忽略的实现细节。
5条答案
按热度按时间6mzjoqzu1#
感谢报告。这不需要是一个提案,所以将其从提案流程中移除。
dpiehjr42#
CC @bcmills
igetnqfo3#
要解决这个问题,可以将GOCACHE环境变量设置为非根用户运行go编译器可写入的路径。也许这应该被记录得更多一些。
kx7yvsdv4#
要解决这个问题,可以将GOCACHE环境变量设置为运行go编译器的非根用户可写入的路径。也许这应该有更多的文档说明。
不幸的是,这似乎对锁文件没有影响。例如,如果我在Dockerfile的最顶部添加:
当我确实在该目录中获取缓存数据时:
我仍然会收到关于相同路径中的相同锁文件的相同错误。
qacovj5a5#
Ah sorry, you will also have to set GOMODCACHE. See #34527