2014-07-17 111 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」才能使其正常工作。 –