【问题标题】:Why is AWS CodePipeline complaining about 'Dockerfile' and 'Dockerrun.aws.json'?为什么 AWS CodePipeline 抱怨“Dockerfile”和“Dockerrun.aws.json”?
【发布时间】:2021-12-12 06:45:49
【问题描述】:

我正在为我的应用程序创建 CodePipeline,但 AWS ElasticBeanstalk 的部署过程失败并出现以下错误:

实例部署:“Dockerfile”和“Dockerrun.aws.json”都是 您的源包中缺少。至少包括其中之一。这 部署失败。

完整的消息错误是:

部署已完成,但出现错误:在中止部署期间, 某些实例可能已经部署了新的应用程序版本。到 确保所有实例都运行相同的版本,重新部署 适当的应用程序版本。未能部署应用程序。 对实例 ID 的命令执行不成功 'i-0b8823de2e7376c81'。中止操作。 [实例: i-0b8823de2e7376c81] 实例上的命令失败。返回码:1 输出:引擎执行遇到错误.. 实例 部署失败。有关详细信息,请参阅“eb-engine.log”。实例 部署:“Dockerfile”和“Dockerrun.aws.json”都缺失 你的源包。至少包括其中之一。部署 失败了。

我的环境有 3 个容器,为了部署这个环境,我使用 docker-compose-qa.yml 文件,在 AWS CodeBuild 中我将此文件定义为神器,如下图:

artifacts:
  files:
    - 'docker-compose-qa.yml'

docker-compose-qa.yml

version: '3.8'

services:

    sitr-api:
        image: ${{ secrets.SITR_API_QA_URI_DOCKER_IMG }}
        container_name: sitr-api-qa
        environment:
            - ASPNETCORE_ENVIRONMENT=QA
        ports:
            - "9901:80"
        volumes:
            - "./Host-Logs:/app/App_Data/Logs"

    sitr-app:
        image: ${{ secrets.SITR_APP_QA_URI_DOCKER_IMG }}
        container_name: sitr-app-qa
        ports:
            - "9902:80"
    
    sitr-nginx: 
        image: ${{ secrets.SITR_NGINX_QA_URI_DOCKER_IMG }}
        container_name: sitr-nginx-qa
        depends_on: 
          - sitr-app
          - sitr-api
        ports: 
          - "80:80"

eb-engine.log 错误:

2021/10/26 22:07:27.977004 [ERROR] 执行过程中发生错误 命令 [app-deploy] - [Docker 特定构建应用程序]。停止 运行命令。错误:Dockerfile 和 Dockerrun.aws.json 都是 丢失,中止部署

2021/10/26 22:07:27.977008 [INFO] 执行清理逻辑 2021/10/26 22:07:27.977098 [INFO] CommandService 响应: {"status":"FAILURE","api_version":"1.0","re​​sults":[{"status":"FAILURE","msg":"Engine 执行遇到了 错误。","re​​turncode":1,"events":[{"msg":"实例部署:两者 您的源代码中缺少“Dockerfile”和“Dockerrun.aws.json” 捆。至少包括其中之一。部署 失败。","timestamp":1635286047,"severity":"ERROR"},{"msg":"Instance 部署失败。有关详细信息,请参阅 'eb-engine.log'.","timestamp":1635286047,"severity":"ERROR"}]}]}

我的 CodeBuild 只需构建一个 dotnet 应用程序angular 应用程序 并为这两个应用程序构建 3 个 docker 容器和 nginx。

如果我手动运行我的 CodeBuild,然后在 AWS EB 中选择我的 docker-compose-qa.yml 文件,则发布已成功应用。

我检查了 AWS S3 存储桶,文件被压缩到工件的文件夹中。

问题是:

为什么 Pipeline 抱怨不存在 'Dockerfile''Dockerrun.aws.json' 文件?如何指定它使用 docker-compose-qa.yml 文件?

【问题讨论】:

  • 遗憾的是,您的问题缺乏细节。您的 EB 平台到底是什么?您是如何定义 CodeBuild 的。不确定 CodeDeploy 与此有什么关系?
  • @Marcin my CodeBuild 只需构建一个 dotnet 应用程序angular 应用程序 并构建 3 个 docker 容器 适用于应用程序和 nginx。我更详细地编辑了问题,但如果我需要完整的 CodeBuild,我可以在问题中发布。
  • 您在 AWS CodeDeploy 中写道“我正在将此文件定义为工件,如下所示”?我想应该是 CodeBuild?此外,您必须将 docker-compose-qa.yml 重命名为 docker-compose.yml
  • 应该叫docker-compose.yml,而不是docker-compose-qa.yml
  • @Marcin 它刚刚完成,它工作是的,它只是文件的名称!如果您可以发布作为答案,我在这里接受! :)

标签: amazon-web-services docker docker-compose amazon-elastic-beanstalk aws-codepipeline


【解决方案1】:

基于 cmets。

问题是由文件名错误引起的。它应该被称为docker-compose.yml,而不是docker-compose-qa.yml。重命名文件解决了这个问题。

【讨论】:

    猜你喜欢
    • 2015-06-09
    • 2020-08-12
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2022-11-08
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多