通过 AWS CodePipeline 构建 Docker 映像时 HTTPS 失败
Posted
技术标签:
【中文标题】通过 AWS CodePipeline 构建 Docker 映像时 HTTPS 失败【英文标题】:HTTPS fails when building Docker image through AWS CodePipeline 【发布时间】:2021-12-29 11:21:28 【问题描述】:我有一个运行我的网页 (nginx) 的 docker 映像的单个实例(Elastic Beanstalk,无负载均衡器)。为了配置它,我有一个 .ebextensions
文件夹,其中包含:https-instance.config
、https-instance-single.config
,并且在根目录中有一个构建映像的 docker 文件。
如果我在本地构建映像,将其上传到 docker hub,然后让 EBS 从这里更新映像,我对应用程序的 HTTPS 调用就可以正常工作。
现在,我已转移到 CodePipelines,在那里我正在检查相同的代码并使用 AWS CodeBuild 构建它,将 docker 映像放在 ECR 上并将其部署到 EBS,我的 HTTP 调用正常,但我的所有 HTTPS 调用都得到了请求超时。
我没有更改托管环境,因此他们可以访问 S3(我的证书位于 nginx 的位置)和一切都和以前一样(如果我从 docker hub 恢复到映像,它会再次工作)。
一定有什么东西阻止了请求。唯一应该改变的是图像的构建位置。
我会包含一些文件,但我不确定在这种情况下包含哪些文件有意义。
任何人都可以给我一些关于在哪里寻找问题以找出问题的指示吗? (我对 AWS 还很陌生)
【问题讨论】:
我认为 .ebextensions 在部署中丢失了,因此从来没有为 HTTPS 配置过 nginx。我正在研究这个 【参考方案1】:问题出在我的 buildspec.yml 文件上。我不得不添加 .ebextensions 作为工件。
artifacts:
files:
- 'Dockerrun.aws.json'
- .ebextensions/**/*
如果没有这个,生成并发送到 Elastic Beanstalk 的文件将只包含 Dockerrun.aws.json,然后 nginx 不会被配置为使用 SSL
【讨论】:
以上是关于通过 AWS CodePipeline 构建 Docker 映像时 HTTPS 失败的主要内容,如果未能解决你的问题,请参考以下文章
AWS CodePipeline ElasticBeanstalk 部署失败
AWS CodePipeline:如何使 CodeBuild 构建的 ECR 映像作为剩余阶段的工件?
AWS CodeBuild + CodePipeline:“找不到匹配的工件路径”
使用 AWS CodePipeline 在 Jenkins 中构建多个 Gradle 项目