GitHub Action无法推送镜像至ghcr.io,Dockerfile构建报错求助
可能的原因及解决方法
工作目录不匹配
本地构建时你大概率是进入./data_pipelines/dataeng_github_metrics目录后执行docker build,但GitHub Action默认在仓库根目录运行构建命令,Docker会在根目录查找go.mod和go.sum,自然找不到子目录里的文件。
解决:要么在docker build命令中指定构建上下文为该子目录:docker build ./data_pipelines/dataeng_github_metrics -t ghcr.io/mirantis/[镜像名]:latest要么在Action步骤中先切换到目标目录再构建:
- name: Build Docker image run: | cd ./data_pipelines/dataeng_github_metrics docker build -t ghcr.io/mirantis/[镜像名]:latest ..gitignore排除了go.sum文件
检查仓库根目录的.gitignore规则,如果包含go.sum或*.sum,会导致该文件未被推送到GitHub仓库。本地有文件但仓库中缺失,就会出现本地构建正常、Action失败的情况。
解决:修改.gitignore移除对go.sum的排除,然后将go.sum提交并推送到仓库。Dockerfile的COPY路径与构建上下文不匹配
Dockerfile中COPY go.mod go.sum /bin/的路径是相对于构建上下文的。如果构建上下文是仓库根目录,而这两个文件在子目录下,Docker会在根目录搜索,必然找不到。这种情况优先调整构建上下文到子目录(参考第一种解决方法),不建议修改Dockerfile路径,避免破坏本地构建逻辑。GitHub Action的checkout步骤配置异常
检查actions/checkout@v4步骤,是否设置了path参数导致代码被检出到非默认目录,或者启用了稀疏检出等限制文件检出的配置。确保checkout步骤完整检出仓库所有文件,包括子目录中的go.mod和go.sum。
内容的提问来源于stack exchange,提问作者R. Barrett

