我有一个错误
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)出现此错误,文件或配置没有任何更改
侃侃无极
一只名叫tom的猫
心有法竹
随时随地看视频慕课网APP
相关分类