Docker 映像公开的端口未映射到 Elastic Beanstalk 主机

Docker 映像公开的端口未映射到 Elastic Beanstalk 主机

80我创建了一个 AWS Elastic Beanstalk 环境,并在端口和上配置了负载均衡器8080,还关闭了代理(最初是 Nginx)。我为其创建了简单的 Node.js 应用程序和 Dockerfile。我还添加了包含以下内容的文件Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1",
  "Ports": [
    {
      "HostPort": "8080",
      "ContainerPort": "8080"
    }
  ]
}

我有自己的图像,没有在任何地方发布,所以我没有提到该Image部分。部署后,我看到一个 Docker 容器正在运行,并且打开了一个端口8080(如预期的那样)。但 Elastic Beanstalk 系统不会将此端口转发到内部 IP 地址。

我做错了什么,如何指示 Elastic Beanstalk 将端口从容器转发到主机(我知道如何手动执行此操作,但对于 Elastic Beanstalk 而言并非如此)?

答案1

我在 rails 容器中默认遇到了同样的问题(使用 puma 的端口 3000)rails 服务器仅绑定本地主机到监听界面,我必须使用-b绑定选项0.0.0.0问题就解决了。

在 react 中我没有遇到同样的问题,因为 npm服务包默认绑定所有接口

答案2

我遇到了非常类似的问题:

  • 一个 Docker 容器,暴露 8080 端口;
  • 代理设置为无(nginx 已禁用);
  • Dockerrun.aws.json与问题中的类似,但使用预先构建的图像而不是Dockerfile
  • 应用程序负载均衡器 (ALB) 配置了默认进程,将请求路由到服务器上的端口 8080。

在此配置中,应用程序容器在服务器上启动,但 Elastic Beanstalk 未将端口的 8080 映射到容器的端口。如果我手动映射端口,使用同一映像启动另一个容器,则它会起作用。日志中没有错误消息,文档中也没有说明问题可能是什么。

将 ALB 配置更改为使用端口 80 而不是 8080 可以解决此问题。

相关内容