通过AWS CodePipeline构建Docker镜像部署到EBS后HTTPS请求超时排查求助
排查方向指引
- 对比本地构建与CodeBuild构建的镜像差异
拉取ECR存储的镜像到本地,和之前上传Docker Hub的镜像做一致性校验:- 执行
docker inspect <镜像ID> | grep ExposedPorts检查两个镜像暴露的端口是否一致,确认Dockerfile中是否同时配置了EXPOSE 80和EXPOSE 443,排除CodeBuild构建过程中端口配置被意外修改的问题 - 对比两个镜像内的nginx配置文件、启动参数是否完全一致,排除构建过程中配置被覆盖的问题
- 执行
- 核查CodeBuild构建流程配置
检查CodeBuild使用的buildspec.yml文件:- 确认构建打包环节没有遗漏根目录下的
.ebextensions文件夹,你可以直接下载CodePipeline输出的部署包,解压验证https-instance.config、https-instance-single.config两个文件是否完整存在、内容无修改。EBS需要读取该文件夹下的配置完成实例HTTPS端口放行、证书拉取的初始化操作,文件丢失会直接导致HTTPS不通 - 确认构建过程没有额外修改Dockerfile的ENTRYPOINT、CMD指令,排除nginx启动逻辑被篡改、未监听443端口的问题
- 确认构建打包环节没有遗漏根目录下的
- 登录EBS关联的EC2实例排查运行状态
- 执行
sudo iptables -L -n核查实例防火墙规则,确认443端口入站规则未被拦截 - 执行
docker ps查看运行容器的端口映射规则,确认存在0.0.0.0:443->443/tcp的映射记录,若不存在则是EBS部署时未正确识别HTTPS端口配置 - 进入运行中的容器,执行
curl -vk https://localhost测试本地HTTPS服务是否正常,如果本地访问失败,查看nginx错误日志/var/log/nginx/error.log即可定位证书加载、端口监听相关的问题 - 检查实例上的SSL证书是否正常拉取,进入你配置的证书存储路径(默认一般为
/etc/pki/tls/certs/)确认证书文件存在、权限配置正确
- 执行
- 验证部署包结构一致性
你之前使用Docker Hub镜像部署时,部署包仅需包含Dockerrun.aws.json即可正常读取.ebextensions配置,切换CodePipeline后需确认输出的部署包结构没有发生变化,避免EBS无法正常识别配置文件导致HTTPS初始化失败
内容的提问来源于stack exchange,提问作者user826988
相关产品推荐
相关产品推荐

