AWS Elastic Beanstalk上的Dockerized Node。错误502 BadGateway

时间:2018-10-30 19:33:42

标签: node.js amazon-web-services docker amazon-elastic-beanstalk

我有一个通过docker化并部署到AWS Elastic Beanstalk的Node应用(同构React应用)。我有以下所有信息,但是如果您需要tldr:如何在AWS Elastic Beanstalk中的主机和容器之间配置端口转发,即5000:3000?

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

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

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

process.env.PORT || 3000

尝试使用端口80访问站点时,出现502错误网关错误。

我通过SSH进入托管我的Docker容器的EC2实例。用于Elasticbeanstalk的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/”,主持人:[Beanstalk URL]连接被拒绝

现在这是踢球器,当我跑步时可以使用:

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

-或-

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

有人知道为什么节点运行3000而不是5000吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

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