`cmd/go`: 文档模块缓存中的`.lock`文件

jgwigjjp  于 4个月前  发布在  Go
关注(0)|答案(5)|浏览(46)

.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 可以解释这些文件的目的和功能,以便了解此类错误,从而解决它们。或者,我也欢迎一个建议的工作流程变更,使这些文件不再成为问题,这样它们就可以成为用户可以忽略的实现细节。

6mzjoqzu

6mzjoqzu1#

感谢报告。这不需要是一个提案,所以将其从提案流程中移除。

igetnqfo

igetnqfo3#

要解决这个问题,可以将GOCACHE环境变量设置为非根用户运行go编译器可写入的路径。也许这应该被记录得更多一些。

kx7yvsdv

kx7yvsdv4#

要解决这个问题,可以将GOCACHE环境变量设置为运行go编译器的非根用户可写入的路径。也许这应该有更多的文档说明。

不幸的是,这似乎对锁文件没有影响。例如,如果我在Dockerfile的最顶部添加:

ENV GOCACHE=/tmp/gocache

当我确实在该目录中获取缓存数据时:

/app $ ls /tmp/gocache
00        0f        1e        2d        3c        4b        5a        69        78        87        96        a4        b3        c2        d1        e0        ef        fe
01        10        1f        2e        3d        4c        5b        6a        79        88        97        a5        b4        c3        d2        e1        f0        ff
02        11        20        2f        3e        4d        5c        6b        7a        89        98        a6        b5        c4        d3        e2        f1        trim.txt
03        12        21        30        3f        4e        5d        6c        7b        8a        99        a7        b6        c5        d4        e3        f2
04        13        22        31        40        4f        5e        6d        7c        8b        9a        a8        b7        c6        d5        e4        f3
05        14        23        32        41        50        5f        6e        7d        8c        9b        a9        b8        c7        d6        e5        f4
06        15        24        33        42        51        60        6f        7e        8d        9c        aa        b9        c8        d7        e6        f5
07        16        25        34        43        52        61        70        7f        8e        9d        ab        ba        c9        d8        e7        f6
08        17        26        35        44        53        62        71        80        8f        9e        ac        bb        ca        d9        e8        f7
09        18        27        36        45        54        63        72        81        90        9f        ad        bc        cb        da        e9        f8
0a        19        28        37        46        55        64        73        82        91        README    ae        bd        cc        db        ea        f9
0b        1a        29        38        47        56        65        74        83        92        a0        af        be        cd        dc        eb        fa
0c        1b        2a        39        48        57        66        75        84        93        a1        b0        bf        ce        dd        ec        fb
0d        1c        2b        3a        49        58        67        76        85        94        a2        b1        c0        cf        de        ed        fc
0e        1d        2c        3b        4a        59        68        77        86        95        a3        b2        c1        d0        df        ee        fd

我仍然会收到关于相同路径中的相同锁文件的相同错误。

qacovj5a

qacovj5a5#

Ah sorry, you will also have to set GOMODCACHE. See #34527

相关问题