在 golang:1.20 容器中构建时出现 docker/podman 问题

在 golang:1.20 容器中构建时出现 docker/podman 问题

有人知道为什么 podman 失败而 docker 可以工作吗?

podman:

$ podman run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.20 go build -v
go: go.mod file not found in current directory or any parent directory; see 'go help modules'

码头工人:

$ sudo docker  run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.20 go build -v
go: downloading github.com/spf13/cobra v1.7.0
go: downloading github.com/spf13/pflag v1.0.5
go: downloading gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473
go: downloading github.com/a8m/envsubst v1.4.2
go: downloading github.com/alecthomas/participle/v2 v2.0.0
go: downloading github.com/dimchansky/utfbom v1.1.1
.. and so on resulting in an artefact

答案1

经过一些检查,发现容器用户没有对已挂载卷的读取权限:

$ podman run --rm  -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.20 /bin/bash -c "id; ls -l /usr/src/; ls -l /usr/src/myapp"
uid=0(root) gid=0(root) groups=0(root)
total 4
drwxr-xr-x. 12 root root 4096 Jul 19 10:19 myapp
ls: cannot open directory '/usr/src/myapp': Permission denied

这反过来给了我一些额外的谷歌材料,让我找到了这个答案devops.stackexchange

tl;dr 答案

  • 我的主机上启用了 selinux,但出现权限问题
  • 改成-v "$PWD":/usr/src/myapp-v "$PWD":/usr/src/myapp:z

更多相关内容:z请见此处https://unix.stackexchange.com/q/651198/2298

相关内容