GitHub Action中Docker绑定挂载提示源文件夹不存在问题排查
问题分析与解决
以下是导致绑定挂载提示源文件夹不存在的可能原因及对应解决方法:
Docker-in-Docker(DinD)的文件系统隔离
GitHub Actions的ubuntu:latestrunner中,Docker是运行在DinD容器内的。你在runner容器里创建的/tmp/scenarios属于runner的文件系统,而DinD的Docker守护进程无法直接访问这个路径——因为DinD有独立的文件系统空间。
解决方法:- 改用GitHub工作目录(
${GITHUB_WORKSPACE})存放scenarios文件夹,这个目录默认会被挂载到DinD容器中,DinD的Docker可以正常访问。比如把/tmp/scenarios替换为${GITHUB_WORKSPACE}/scenarios,先在runner里把文件复制到这个路径再执行挂载。 - 如果必须使用
/tmp路径,需要在启动DinD service时手动添加volume挂载,将runner的/tmp/scenarios映射到DinD容器的对应路径。在GitHub Actions的job配置中修改service部分:services: docker: image: docker:dind volumes: - /tmp/scenarios:/tmp/scenarios
- 改用GitHub工作目录(
路径解析的shell异常
你docker run命令中src="/tmp/scenarios"的引号可能在shell解析时出现问题(概率较低)。可以尝试去掉引号,改用无引号的绝对路径写法:docker run -d -i --name NAME --mount type=bind,src=/tmp/scenarios,target=/data --entrypoint /bin/bash myImage:$VERSIONDinD的默认挂载限制
默认情况下,GitHub Actions的DinD服务只会将${GITHUB_WORKSPACE}挂载到DinD容器,其他路径(比如/tmp)不在共享范围内,因此DinD的Docker无法识别runner里的/tmp/scenarios。这是最常见的原因,优先尝试改用工作目录的方案。
内容的提问来源于stack exchange,提问作者ventsyv
相关产品推荐
相关产品推荐

