Docker本地运行正常但GitHub Actions构建失败:文件或目录不存在
解决GitHub Actions中Docker构建chmod失败问题
问题描述
本地构建Docker镜像完全正常,但执行GitHub Actions工作流时出现如下报错:
ERROR: failed to solve: process "/bin/sh -c chmod +x /app/wisecow/wisecow.sh" did not complete successfully: exit code: 1 Error: buildx failed with: ERROR: failed to solve: process "/bin/sh -c chmod +x /app/wisecow/wisecow.sh" did not complete successfully: exit code: 1
原因分析
结合你提供的Workflow和Dockerfile来看,核心问题是构建上下文路径不一致:
- 本地构建时,你大概率是在
./app目录下执行docker build,此时Dockerfile中的COPY wisecow/ /app/wisecow会读取./app/wisecow目录下的文件 - 但GitHub Actions中,
docker/build-push-action的构建上下文设置为根目录(context: .),而Workflow里的defaults.run.working-directory: ./app仅影响run步骤,不改变Docker构建的上下文路径。这就导致Docker在构建时找不到根目录下的wisecow目录,文件复制失败,后续chmod命令因找不到目标文件报错。
解决方案
方案1:调整Docker构建上下文与本地一致
修改GitHub Actions工作流中的Build and push Docker image步骤,将构建上下文改为./app,同时指定Dockerfile的完整路径:
- name: Build and push Docker image uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 with: context: ./app file: ./app/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
方案2:修改Dockerfile中的COPY路径
如果不想调整构建上下文,可以修改Dockerfile中的COPY命令,指定相对于仓库根目录的路径:
# Copy the shell script into the image COPY app/wisecow/ /app/wisecow
辅助排查步骤(可选)
如果上述方案无效,可以在Dockerfile的RUN chmod命令前添加文件检查步骤,确认文件是否被正确复制:
# Verify file exists before chmod RUN ls -la /app/wisecow/ # Make the script executable RUN chmod +x /app/wisecow/wisecow.sh
同时检查仓库中wisecow.sh是否被正确提交,没有被.gitignore规则忽略。
内容的提问来源于stack exchange,提问作者Allen Anand
相关产品推荐
相关产品推荐

