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 可以解决此问题。