提取quay.io指定Docker镜像的Dockerfile时遇权限拒绝,求解决方案
解决Docker镜像Dockerfile提取的权限问题及替代方案
嘿,我来帮你搞定这个问题~你遇到的permission denied错误,本质是运行alpine/dfimage容器时,容器里的用户没权限碰宿主机器上的/var/run/docker.sock——这个文件默认归root用户和docker用户组管,容器里的普通用户自然没权限访问。
先把当前命令的权限问题修好
有两种简单的办法解决这个权限问题:
- 直接以root身份运行容器,加个
--user root参数就行:docker run --user root -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage -sV=1.36 quay.io/opendatahub/spark-cluster-image:spark24 - 把宿主的docker组ID传给容器,让容器内用户加入这个组:
先查一下宿主机器上docker组的ID:
假设查到的ID是getent group docker | cut -d: -f3999,就用这个ID运行命令:docker run -v /var/run/docker.sock:/var/run/docker.sock --rm --group-add 999 alpine/dfimage -sV=1.36 quay.io/opendatahub/spark-cluster-image:spark24
还有其他提取Dockerfile的办法
如果上面的方法还是不行,或者你想换个思路,试试这两个常用方案:
用docker history扒出镜像构建步骤
Docker镜像的每一层都对应构建时的命令,你可以用docker history把这些步骤导出来,手动整理成Dockerfile:
docker history --no-trunc quay.io/opendatahub/spark-cluster-image:spark24 > image-history.txt
打开生成的image-history.txt,就能看到每一层的构建指令,按顺序整理一下,就能得到近似的Dockerfile(注意有些命令可能被压缩,需要手动调整细节)。
直接找镜像的源码仓库
这个镜像来自quay.io/opendatahub,属于Open Data Hub这个开源项目,这类项目一般会把Dockerfile放在GitHub或GitLab的源码仓库里。你直接搜这个镜像的名称,大概率能找到对应的项目仓库,里面肯定有完整的Dockerfile和构建脚本。
内容的提问来源于stack exchange,提问作者Aviral Srivastava




