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

GitHub Actions构建推送Docker镜像报错:Dockerfile不存在

解决GitHub Actions构建Docker镜像时“Dockerfile不存在”的错误

我尝试通过GitHub Actions将Docker镜像构建并推送到DockerHub,但遇到错误提示:Dockerfile does not exist in location Dockerfile,虽参考过相关解决方案仍未解决问题。

GitHub Actions配置代码

service:
  runs-on: ubuntu-latest
  defaults:
    run:
      working-directory: ./microservices/service

  strategy:
    matrix:
      node-version: [16.x]

  steps:
  - name: CHECK-OUT GIT REPOSITORY
    uses: actions/checkout@v3
  - name: Use Node.js ${{ matrix.node-version }}
    uses: actions/setup-node@v3
    with:
      node-version: ${{ matrix.node-version }}
      cache: 'npm'
      cache-dependency-path: '**/package-lock.json'
  - name: INSTALL DEPENDENCIES
    run: npm ci
  - name: BUILDING APP
    run: npm run build --if-present
  #- name: TESTINT APP
  #- run: npm test
  - name: Build & push Docker image
    uses: mr-smithers-excellent/docker-build-push@v5
    with:
      image: dockercountname/aos_movie_service
      tags: latest
      registry: docker.io
      dockerfile: Dockerfile
      username: ${{ secrets.DOCKER_USERNAME }}
      password: ${{ secrets.DOCKER_PASSWORD }}

本地目录结构

microservice_cicd(文件夹)
   microservices(文件夹)
     service1(文件夹)
       package.json
       Dockerfile
       ...
     service2(文件夹)
       package.json
       Dockerfile
       ...

Dockerfile内容

FROM node:latest
RUN mkdir -p /src/app
WORKDIR /src/app
COPY package.json /src/app/package.json
RUN npm install
COPY . /src/app
EXPOSE 3003
CMD [ "npm", "start" ]

问题分析与解决方案

核心问题

配置中defaults.run.working-directory设置为./microservices/service,但实际目录里只有service1和service2,路径不匹配导致找不到Dockerfile;另外,第三方构建action可能不会自动继承全局的工作目录配置,需要显式指定镜像构建的上下文和Dockerfile路径。

方案1:构建单个服务(以service1为例)

修改全局工作目录为实际服务路径,同时确保构建action指向正确的Dockerfile:

service:
  runs-on: ubuntu-latest
  defaults:
    run:
      working-directory: ./microservices/service1 # 修正为实际服务目录

  strategy:
    matrix:
      node-version: [16.x]

  steps:
  # 前面步骤不变
  - name: Build & push Docker image
    uses: mr-smithers-excellent/docker-build-push@v5
    with:
      image: dockercountname/aos_movie_service
      tags: latest
      registry: docker.io
      dockerfile: Dockerfile # 此时工作目录已指向service1,直接写Dockerfile即可
      context: ./microservices/service1 # 显式指定构建上下文,避免路径问题
      username: ${{ secrets.DOCKER_USERNAME }}
      password: ${{ secrets.DOCKER_PASSWORD }}

方案2:批量构建多个服务

通过matrix遍历服务名称,动态设置工作目录和构建路径:

service:
  runs-on: ubuntu-latest
  strategy:
    matrix:
      node-version: [16.x]
      service-name: [service1, service2] # 遍历所有服务

  steps:
  - name: CHECK-OUT GIT REPOSITORY
    uses: actions/checkout@v3
  - name: Use Node.js ${{ matrix.node-version }}
    uses: actions/setup-node@v3
    with:
      node-version: ${{ matrix.node-version }}
      cache: 'npm'
      cache-dependency-path: microservices/${{ matrix.service-name }}/package-lock.json # 动态指定缓存路径
  - name: INSTALL DEPENDENCIES
    run: npm ci
    working-directory: ./microservices/${{ matrix.service-name }} # 动态设置工作目录
  - name: BUILDING APP
    run: npm run build --if-present
    working-directory: ./microservices/${{ matrix.service-name }}
  - name: Build & push Docker image
    uses: mr-smithers-excellent/docker-build-push@v5
    with:
      image: dockercountname/aos_movie_${{ matrix.service-name }} # 镜像名称区分服务
      tags: latest
      registry: docker.io
      dockerfile: microservices/${{ matrix.service-name }}/Dockerfile # 显式指定Dockerfile路径
      context: microservices/${{ matrix.service-name }} # 显式指定构建上下文
      username: ${{ secrets.DOCKER_USERNAME }}
      password: ${{ secrets.DOCKER_PASSWORD }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:45:40