You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GitHub Action创建Docker镜像失败问题求助

GitHub Action构建Docker镜像失败:Dockerfile找不到

问题场景

使用GitHub Action构建BW6应用,生成Jar文件后创建Docker镜像时,代码拉取和Jar打包步骤均成功,但执行「Build and push images」步骤报错:

ERROR: failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount1297911053/Dockerfile: no such file or directory

进程以退出码1终止。

当前GitHub Action工作流配置

name: Tibco Workflow

on:
  workflow_dispatch:  # 允许手动触发工作流

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout Repository
      uses: actions/checkout@v2

    - name: Set up JDK and Maven
      uses: actions/setup-java@v2
      with:
        distribution: 'adopt'
        java-version: '11'
        
    - name: Print Current Directory
      run : ls -la /home/runner/work/sm.baseSchema/sm.baseSchema/src/sm.baseSchemas/target
       

    - name: Build and Package BW6 Application
      run: |
        cd src/sm.baseSchemas
        mvn clean package -P mavenize
      env:
        MAVEN_OPTS: '-Dmaven.repo.local=./.m2/repository'
        

    -  name: Set up QEMU
       uses: docker/setup-qemu-action@v3
      
    -  name: Set up Docker Buildx
       uses: docker/setup-buildx-action@v3
      
    -  name: Login to Docker Hub
       uses: docker/login-action@v3
       with:
          username: USERNAME
          password: PASSWORD

    - name: Build and push images
      run : | 
          docker build -t smbase:smbase -f /home/runner/work/sm.baseSchema/sm.baseSchema/src/sm.baseSchemas/target/Dockerfile .

当前Dockerfile内容

FROM tibco/bwce:latest

WORKDIR /app

COPY /home/runner/work/sm.baseSchema/sm.baseSchema/src/sm.baseSchemas/target/sm.baseSchemas_1.0.0.202303271123.jar /app/

EXPOSE 8080

CMD ["java", "-jar", "sm.baseSchemas_1.0.0.202303271123.jar"] 

错误原因

  1. Dockerfile路径错误:docker build命令中使用绝对路径指定Dockerfile,但Docker构建时会以当前目录(.)作为上下文,无法识别宿主机的绝对路径,导致找不到文件。
  2. COPY指令路径错误:Dockerfile中的COPY使用了宿主机绝对路径,而COPY的源路径必须是相对于构建上下文的相对路径,否则Docker无法在上下文内定位文件。

修复方案

1. 修正Dockerfile的COPY指令

将Jar文件的源路径改为相对构建上下文的路径(假设构建上下文为仓库根目录,Jar文件位于src/sm.baseSchemas/target/下):

FROM tibco/bwce:latest

WORKDIR /app

# 使用相对路径复制Jar文件(相对于构建上下文)
COPY src/sm.baseSchemas/target/sm.baseSchemas_1.0.0.202303271123.jar /app/

EXPOSE 8080

CMD ["java", "-jar", "sm.baseSchemas_1.0.0.202303271123.jar"] 

2. 调整GitHub Action中的构建命令

情况A:Dockerfile放在仓库根目录(推荐)

直接在根目录执行构建,无需指定Dockerfile路径(默认查找当前目录下的Dockerfile):

- name: Build and push images
  run : | 
      docker build -t smbase:smbase .

情况B:Dockerfile确实在target目录

可以切换到target目录执行构建,或者用相对路径指定Dockerfile:

- name: Build and push images
  run : | 
      # 方式1:切换到target目录构建
      cd src/sm.baseSchemas/target
      docker build -t smbase:smbase .
      
      # 方式2:在根目录用相对路径指定Dockerfile
      # docker build -t smbase:smbase -f src/sm.baseSchemas/target/Dockerfile .

额外优化建议

  • 建议将Dockerfile放在仓库根目录,避免路径混乱,便于后续维护。
  • 避免硬编码Jar文件名,可在Maven中通过${project.artifactId}-${project.version}.jar动态生成,或在GitHub Action中通过命令提取Jar文件名,减少维护成本。

内容的提问来源于stack exchange,提问作者Niladri Dey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:43:18