Docker构建报error from sender错误,.dockerignore为何未忽略只读目录
问题根因
Docker 客户端执行构建前会先递归扫描整个构建上下文的所有文件、目录,再匹配 .dockerignore 规则过滤不需要的内容。你遇到的报错发生在扫描阶段,早于规则匹配步骤:
- 你的
client/cypress/resource目录权限为drwx------,所有者为 root,执行构建的普通用户没有读取、进入该目录的权限 - Docker 客户端扫描到该目录时,尝试读取目录内容直接触发权限报错,还没来得及应用你配置的
client/cypress/resource忽略规则
你提到忽略上级目录就能正常构建,原因也在这里:如果上级目录被标记为忽略,Docker 会直接跳过遍历该目录,不会碰到权限受限的 resource 目录。
可行解决方案(无需修改目录权限)
以下方案均可绕过权限问题:
- 调整
.dockerignore规则,添加末尾斜杠匹配目录本身:
部分Docker版本会直接跳过匹配到的目录的内部遍历,不需要读取目录内容就可以应用忽略规则。client/cypress/resource/ - 调整COPY指令,不复制整个client目录,改为单独复制你需要的client子目录/文件,直接跳过cypress目录或者cypress下的resource目录,示例:
WORKDIR /src COPY client/package.json client/ COPY client/src client/src # 只复制cypress下除了resource之外的内容 COPY client/cypress/*.js client/cypress/ COPY client/cypress/e2e client/cypress/e2e CMD ["/bin/bash"] - 如果用构建脚本执行docker build,可以在构建前临时将
client/cypress/resource移动到构建上下文外,构建完成后再移回。
内容的提问来源于stack exchange,提问作者tgk
相关产品推荐
相关产品推荐

