Home > Mobile >  Github workflow not getting the requirements.txt file while building docker image
Github workflow not getting the requirements.txt file while building docker image

Time:01-14

I have a github workflow that is building the docker image, installing dependencies using requirements.txt and pushing to AWS ECR. When I am checking it locally all is working fine but when github workflow is running it is not able to access the requirements.txt file and shows the following error

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

Below is my simple 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" ]

Here is cicd yaml file.

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 }}

Below is the structure of my directory. The requirements.txt file is inside API directory with all the related code that is needed to build and run the image.

enter image description here

CodePudding user response:

Based upon the questions' comments, the Python requirements.txt file is located in the API directory. This command is is specifying the Dockerfile using a path in the API directory, but building the container in the current directory.

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

The correct approach is to build the container in the API directory:

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

Notice the change from . to API and removing the Dockerfile location -f API/Dockerfile

  •  Tags:  
  • Related