含Docker的WordPress仓库迁移至Azure DevOps后Pipeline构建报文件不存在错误
Azure Pipeline构建WordPress Docker镜像失败问题定位与修复
核心问题根因
本地执行docker build构建正常、流水线抛出stat '/home/vsts/work/1/s/wp-content/db.php'不存在的错误,是三处配置错配叠加导致的:
- Docker@2任务的构建上下文规则与本地手动构建逻辑不一致
本地在项目根目录执行docker build -t test .时,构建上下文默认覆盖根目录下所有未被.dockerignore排除的文件。但Azure DevOps的Docker@2任务如果不显式声明buildContext参数,在使用**/Dockerfile通配符匹配Dockerfile路径时,会默认将匹配到的Dockerfile所在目录作为构建上下文,而非仓库根目录,和本地构建的上下文范围不统一。 - Presslabs WordPress运行时镜像的内置构建脚本会做固定路径校验
你使用的quay.io/presslabs/wordpress-runtime:5.5.1-php-7.4镜像内置了站点文件的自动部署逻辑,构建阶段会直接从构建上下文的固定路径下读取wp-content目录的自定义文件,一旦上下文范围偏移,脚本就会抛出ENOENT类的文件不存在错误。 - 迁移过程中可能误配置了
.dockerignore排除规则
从GitHub迁移仓库到Azure DevOps时,如果仓库根目录的.dockerignore文件中加入了对wp-content路径的排除规则,会直接导致该目录下的所有文件不会被传入Docker构建的临时上下文,哪怕文件在仓库源目录下真实存在,构建流程也无法读取到。
具体修复步骤
- 显式指定Docker构建的上下文路径
在Docker@2任务的输入配置中补充buildContext参数,将构建上下文明确指向仓库在构建代理上的本地路径,和本地构建的上下文范围保持一致:- task: Docker@2 inputs: containerRegistry: 'gcr-publisher' command: 'buildAndPush' Dockerfile: '**/Dockerfile' buildContext: '$(Build.Repository.LocalPath)' tags: '$(Build.BuildId)' - 校验
.dockerignore规则
检查仓库根目录下的.dockerignore文件,确认没有将wp-content、config这类需要打包到镜像的路径加入排除列表,避免必要文件被Docker构建流程过滤。 - 匹配路径校验
对照docker-compose配置的挂载映射确认:你本地环境是将根目录下的./wp-content映射到容器内的/app/web/wp-content,由于当前Dockerfile没有编写任何COPY指令,所有自定义站点文件的读取完全依赖构建上下文的相对路径匹配,一旦上下文根目录偏移,构建脚本就无法找到对应路径下的db.php文件。
内容的提问来源于stack exchange,提问作者Ties Theunissen
相关产品推荐
相关产品推荐

