【问题标题】:Github workflow not getting the requirements.txt file while building docker imageGithub 工作流程在构建 docker 映像时未获取 requirements.txt 文件
【发布时间】:2022-01-14 03:39:12
【问题描述】:

我有一个 github 工作流,它正在构建 docker 映像、使用 requirements.txt 安装依赖项并推送到 AWS ECR。当我在本地检查时一切正常,但是当 github 工作流运行时,它无法访问 requirements.txt 文件并显示以下错误

ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'

下面是我的简单dockerfile

FROM amazon/aws-lambda-python:3.9
COPY . ${LAMBDA_TASK_ROOT}
RUN pip3 install scipy
RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
CMD [ "api.handler" ]

这里是 cicd yaml 文件。

name: Deploy to ECR

on:
  push:
    branches: [ metrics_handling ]

jobs:
  build:

    name: Build Image
    runs-on: ubuntu-latest

    steps:
    - name: Check Out Code
      uses: actions/checkout@v2
    
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ secrets.REGION }}

    - name: Build, Tag, and Push image to Amazon ECR
      id: tag
      run: |
        aws ecr get-login-password --region ${region}  | docker login --username AWS --password-stdin ${accountid}.dkr.ecr.${region}.amazonaws.com
        
        docker rmi --force ${accountid}.dkr.ecr.${region}.amazonaws.com/${ecr_repository}:latest
        
        docker build --tag ${accountid}.dkr.ecr.${region}.amazonaws.com/${ecr_repository}:latest -f API/Dockerfile . --no-cache
        
        docker push ${accountid}.dkr.ecr.${region}.amazonaws.com/${ecr_repository}:latest
        
      
      env:
        accountid: ${{ secrets.ACCOUNTID}}
        region: ${{ secrets.REGION }}
        ecr_repository: ${{ secrets.ECR_REPOSITORY }}

下面是我的目录结构。 requirements.txt 文件位于 API 目录中,其中包含构建和运行映像所需的所有相关代码。

【问题讨论】:

  • requirements.txt 文件在哪里?您的屏幕截图没有显示。
  • @JohnHanley 它的内部 API 目录。 dockerfile 和 requirements.txt 文件都在 API 目录中。
  • 您在 API 目录中指定 Dockerfile,但您是从 API 的父目录构建的。这就是没有找到 requirements.txt 的原因。
  • @JohnHanley 我在 pipeline.yaml 文件中使用这个构建命令。 docker build --tag ${accountid}.dkr.ecr.${region}.amazonaws.com/${ecr_repository}:latest -f API/Dockerfile 。 --no-cache 这还不够吗?
  • 使用这个构建命令:docker build --tag ${accountid}.dkr.ecr.${region}.amazonaws.com/${ecr_repository}:latest API --no-缓存

标签: docker github aws-lambda github-actions requirements.txt


【解决方案1】:

根据问题的 cmets,Python requirements.txt 文件位于 API 目录中。此命令是使用 API 目录中的路径指定 Dockerfile,但在当前目录中构建容器。

docker build --tag ${accountid}.dkr.ecr.${region}.amazonaws.com/${ecr_repository}:latest -f API/Dockerfile . --no-cache

正确的做法是在API目录构建容器:

docker build --tag ${accountid}.dkr.ecr.${region}.amazonaws.com/${ecr_repository}:latest API --no-cache

注意从 .API 的变化并删除 Dockerfile 位置 -f API/Dockerfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 2017-08-26
    • 1970-01-01
    • 2022-08-10
    • 2021-03-17
    • 1970-01-01
    • 2016-12-22
    • 2018-01-05
    相关资源
    最近更新 更多