2014-07-17 78 views
10

试图在目前在单个实例上运行的AWS Elastic Beanstalk中部署Docker镜像。除了通过Socket.IO使用的WebSockets之外,它一切正常。使用Docker的Elastic Beanstalk上的WebSockets

Another post建议删除nginx,但要么不再可能,要么不是Docker部署的选项。

我有一个Python脚本,改变nginx配置,以允许WebSocket连接。当我进入实例并运行该脚本时,它可以工作。然而,当ebextensions运行时,那部分nginx配置还不存在,所以我不能自动运行这个脚本。

如果您想自己尝试,我正在尝试部署databench_examples。当你使用eb initeb start进行部署时,它正在工作,然后ssh进入实例并转到/var/app/current并运行sudo python nginx_socketio_conf.py,这会更改nginx配置文件。如果它不起作用,那么在运行simplepi分析时,您会在浏览器控制台中看到Socket.IO握手的500错误。

回答

6

运行ebextensions时,nginx配置文件不存在是正确的。原因如下:该配置文件是在之后动态生成的,因为Docker容器的端口映射直到容器停止后才知道,因此应用程序已部署。因此,ebextensions执行的令人敬畏的Python脚本没有配置文件可操作。

另一种传统的方法是行不通的,即写nginx的配置文件来/etc/nginx/conf.d因为location指令已在sites_enabled配置的server块内存在。所以这是不行的。

我创建了一个PR来说明可以工作的方法:https://github.com/svenkreiss/databench_examples/pull/3这是一个未公开的技术,它将Python/nginx突变脚本放到Elastic Beanstalk的挂钩目录中的正确位置。产生nginx的配置后立即脚本然后通过弹性豆茎执行(弹性豆茎将在按字母顺序的钩子子目录运行可执行的脚本,因此01_前缀。

谢谢,

埃文

+0

您好Evan,我遇到了mongoDB 27017端口的类似问题,下面是我的完整问题(http://stackoverflow.com/q/26478962/1116959),建议我怎么解决它?谢谢 –

+0

For参考,这个PR将一个脚本放入/ opt/elasticbeanstalk/hooks/appdeploy/enact /中,以重写Amazon放置的配置。 – rektide

+1

要重新启动nginx,我必须使用“sudo initctl restart nginx”而不是“service restart nginx”才能使其正常工作。 –