我有一個錯誤go: open /go/src/dummy/go.mod: permission denied當(dāng)我嘗試在 Docker中執(zhí)行任何go 命令時(go get、go list 等)操作系統(tǒng):$ lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 18.04.4 LTSRelease: 18.04Codename: bionic碼頭工人:$ docker -vDocker version 19.03.6, build 369ce74a3c圖片:golang:1.13.3-alpine3.10為了說明這一點,我創(chuàng)建了一個虛擬項目main.go:package mainimport ( "fmt")func main() { fmt.Print("this file is not important for question")}Dockerfile:FROM golang:1.13.3-alpine3.10 as builderWORKDIR /go/src/dummyCOPY . .RUN go listCMD tail -f /dev/null和空文件 go.mod 和 go.sum,所以現(xiàn)在項目目錄是:$ 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構(gòu)建圖像,我得到:$ docker build -t dummy ~/go/src/dummySending build context to Docker daemon 4.608kBStep 1/5 : FROM golang:1.13.3-alpine3.10 as builder ---> f23ef2e47d30Step 2/5 : WORKDIR /go/src/dummy ---> Running in 0e276917d658Removing intermediate container 0e276917d658 ---> e9e910dd0ccdStep 3/5 : COPY . . ---> 19230669ad27Step 4/5 : RUN go list ---> Running in faefa6d5930ego: open /go/src/dummy/go.mod: permission deniedThe command '/bin/sh -c go list' returned a non-zero code: 1現(xiàn)在我更改了一個 Dockerfile 以保持活動狀態(tài)(注釋第 4 行:# RUN go list),以便我可以構(gòu)建和運行映像$ docker build -t dummy ~/go/src/dummy....Successfully built 385e0629e67fSuccessfully tagged dummy:latest然后我在 docker 中運行 sh,并獲得復(fù)制文件的權(quán)限:$ docker exec -it 6da5ca617c4d sh#-----now we in the docker-----/go/src/dummy # ls -ltotal 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 等)也存在相同的問題同樣的問題在實際項目中重現(xiàn),所以我無法在 docker 中執(zhí)行g(shù)o get、go list等。以前,一切正常,但在某些時候(22.05.2020)出現(xiàn)此錯誤,文件或配置沒有任何更改
2 回答

一只名叫tom的貓
TA貢獻1906條經(jīng)驗 獲得超3個贊
嘗試更換:
RUN go list
和
RUN ["chmod", "+rwx", "go list"]
+x
也應(yīng)該這樣做。我提到+rwx
了如何明確設(shè)置權(quán)限的想法。Forgo list
:+x
許可就好了。
您可能知道基于 alpine 的圖像有sh
shell 而不是bash
.
Docker 中 RUN 的默認 shell 是/bin/sh
,這里的權(quán)限設(shè)置不正確(問題)。
RUN /bin/bash -c <command>
也應(yīng)該可以工作,但由于基于 alpine 的圖像沒有開箱即用的 bash,那么顯式設(shè)置權(quán)限應(yīng)該會對您有所幫助!
- 2 回答
- 0 關(guān)注
- 399 瀏覽
添加回答
舉報
0/150
提交
取消