Docker:go命令上的'go.mod:权限被拒绝'

我有一个错误


go: open /go/src/dummy/go.mod: permission denied

当我尝试在 Docker中执行任何go 命令时(go get、go list 等)


操作系统:


$ lsb_release -a

No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.4 LTS

Release:    18.04

Codename:   bionic

码头工人:


$ docker -v

Docker version 19.03.6, build 369ce74a3c

图片:golang:1.13.3-alpine3.10


为了说明这一点,我创建了一个虚拟项目


main.go:


package main


import (

    "fmt"

)


func main() {

    fmt.Print("this file is not important for question")

}

Dockerfile:


FROM golang:1.13.3-alpine3.10 as builder

WORKDIR /go/src/dummy

COPY . .

RUN go list

CMD tail -f /dev/null

和空文件 go.mod 和 go.sum,所以现在项目目录是:


$ ls -l

-rw-r--r-- 1 curuser curuser 139 may 23 15:03 Dockerfile

-rw-r--r-- 1 curuser curuser  22 may 23 15:03 go.mod

-rw-r--r-- 1 curuser curuser   0 may 23 14:48 go.sum

-rw-r--r-- 1 curuser curuser  86 may 23 14:50 main.go

构建图像,我得到:


$ docker build -t dummy ~/go/src/dummy

Sending build context to Docker daemon  4.608kB

Step 1/5 : FROM golang:1.13.3-alpine3.10 as builder

 ---> f23ef2e47d30

Step 2/5 : WORKDIR /go/src/dummy

 ---> Running in 0e276917d658

Removing intermediate container 0e276917d658

 ---> e9e910dd0ccd

Step 3/5 : COPY . .

 ---> 19230669ad27

Step 4/5 : RUN go list

 ---> Running in faefa6d5930e

go: open /go/src/dummy/go.mod: permission denied

The command '/bin/sh -c go list' returned a non-zero code: 1

现在我更改了一个 Dockerfile 以保持活动状态(注释第 4 行:# RUN go list),以便我可以构建和运行映像


$ docker build -t dummy ~/go/src/dummy

....

Successfully built 385e0629e67f

Successfully tagged dummy:latest

然后我在 docker 中运行 sh,并获得复制文件的权限:


$ docker exec -it 6da5ca617c4d  sh

#-----now we in the docker-----

/go/src/dummy # ls -l

total 12

-rw-r--r--    1 root     root           108 May 23 12:15 Dockerfile

-rw-r--r--    1 root     root            22 May 23 12:03 go.mod

-rw-r--r--    1 root     root             0 May 23 11:48 go.sum

-rw-r--r--    1 root     root            86 May 23 11:50 main.go


其他版本的 golang 映像(golang:1.13.11-alpine3.11、1.14.3-alpine3.11 等)也存在相同的问题


同样的问题在实际项目中重现,所以我无法在 docker 中执行go get、go list等。


以前,一切正常,但在某些时候(22.05.2020)出现此错误,文件或配置没有任何更改


侃侃无极
浏览 483回答 2
2回答

一只名叫tom的猫

尝试更换:RUN&nbsp;go&nbsp;list和RUN&nbsp;["chmod",&nbsp;"+rwx",&nbsp;"go&nbsp;list"]+x也应该这样做。我提到+rwx了如何明确设置权限的想法。For&nbsp;go list:+x许可就好了。您可能知道基于 alpine 的图像有shshell 而不是bash.Docker 中 RUN 的默认 shell 是/bin/sh,这里的权限设置不正确(问题)。RUN /bin/bash -c <command>也应该可以工作,但由于基于 alpine 的图像没有开箱即用的 bash,那么显式设置权限应该会对您有所帮助!

心有法竹

解决方案是完全重新安装 docker。重新安装后(相同版本 19.03.6)一切正常。不幸的是,我找不到解决此问题的原因和任何其他方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go