AWS弹性Beanstalk上的停靠节点.错误502 BadGateway



我有一个节点应用程序(Isomorphic React应用程序(,它被固定化并部署到AWS Elastic Beanstalk。我有下面的所有信息,但如果你想要一个tldr:你如何在AWS Elastic Beanstalk中配置主机和容器之间的端口转发,即5000:3000?

我希望我的应用程序像这样工作(数字是端口(:

End User --80--> EC2 Instance / Nginx --5000--> Container --3000--> Application 

我用Dockerfile曝光了5000。我知道这只是一个建议,但据我所知,亚马逊使用它来公开docker容器中的端口,而不是docker-compose.yml。该应用程序在端口3000上运行。节点中要在端口3000上运行的代码:

process.env.PORT || 3000

当尝试使用端口80访问网站时,我收到了一个502坏网关错误。

我SSHed进入托管docker容器的EC2实例。弹性豆茎的nginx配置如下:

upstream docker {
server [CONTAINER_IP]:5000;
keepalive 256;
}

IP是容器的正确IP(我使用Docker Inspect进行了检查(。运行时:sudo docker ps -a

我得到:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
REDACTED        REDACTED        "node server.js"    34 hours ago        Up 34 hours         5000/tcp            jolly_williams

如果我在EC2主机实例上运行netstat,我会看到端口80是打开的:

tcp        0      0 0.0.0.0:80

当我查看EC2主机实例上的日志时,我多次看到不同资源的错误:

请求:"GET/HTTP/1.1",上游:"HTTP://[CONTAINER_IP]:5000/",主机:[BeanstalkURL]连接拒绝

现在是踢球者,它在我运行时工作:

sudo curl [ContainerIP]:3000 (from the EC2 host intance)

-或-

sudo docker exec -ti [CONTAINER_NAME] curl http://localhost:3000

有人知道为什么节点消耗3000而不是5000吗?我能做什么?

与AWS支持人员交谈。他们说docker端口必须与应用程序正在侦听的端口相同,即没有端口映射

最新更新