Github 工作流程在构建 docker 图像时未获取 requirements.txt 文件
Github workflow not getting the requirements.txt file while building docker image
我有一个 github 工作流程,它正在构建 docker 图像,使用 requirements.txt 安装依赖项并推送到 AWS ECR。当我在本地检查它时一切正常,但是当 github 工作流处于 运行ning 时它无法访问 requirements.txt 文件并显示以下错误
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
下面是我的简单docker文件
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 目录中,其中包含构建所需的所有相关代码和 运行 图像。
根据问题的评论,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
我有一个 github 工作流程,它正在构建 docker 图像,使用 requirements.txt 安装依赖项并推送到 AWS ECR。当我在本地检查它时一切正常,但是当 github 工作流处于 运行ning 时它无法访问 requirements.txt 文件并显示以下错误
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
下面是我的简单docker文件
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 目录中,其中包含构建所需的所有相关代码和 运行 图像。
根据问题的评论,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