AWS EB,Play框架和Docker:应用程序已经运行
我在AWS Elastic Beanstalk上运行Play 2.2.3 Web应用程序,使用SBT生成Docker镜像。 从EBpipe理界面上传图像通常是可行的,但有时会进入一种状态,我一直得到以下错误:
Docker容器在Thu Nov 27 10:05:37 UTC 2014意外退出:Play服务器进程ID是1此应用程序已经运行(或删除/ opt / docker / RUNNING_PID文件)。
并且部署失败。 除了终止环境并重新设置以外,我无法做出任何其他的事情。 我怎样才能避免环境进入这种状态?
听起来像你可能会遇到臭名昭着的Pid 1问题。 Docker为每个容器使用一个新的pid名称空间,这意味着第一个进程获得PID 1. PID 1是一个特殊的ID,只能由devise使用它的进程使用。 你可以尝试使用Supervisord而不是将playframework作为主要进程运行,看看是否能解决你的问题? 希望supervisord比Play框架更好地处理Amazon的终止命令。
@dkm与我的dockerized play app有同样的问题。 我使用'$ sbt clean dist`命令将我的应用程序打包为独立产品。 这会生成一个.zip文件,您可以将其部署到泊坞窗容器中的某个文件夹,如/ var / www / xxxx。
获取bash shell到您的容器中: $ docker run -it <your image name> /bin/bash
例如: docker run -it centos/myapp /bin/bash
一旦应用程序在那里,你将不得不创build一个可执行的bash脚本,我叫我的startapp
和内容应该是这样的:
在docker容器中创build脚本文件:
$ touch startapp && chmod +x startapp $ vi startapp
添加执行命令和任何必需的configuration:
#!/bin/bash /var/www/<your app name>/bin/<your app name> -Dhttp.port=80 -Dconfig.file=/var/www/pointflow/conf/<your app conf. file>
然后保存startapp脚本,然后从一个新的terminal,然后你必须提交你的更改到你的容器的图像,所以它将从这里出来:
获取正在运行的容器的当前ID:
$ docker ps
提交/保存更改
$ docker commit <your running containerID> <your image's name>
例如: docker commit 1bce234 centos/myappsname
现在对于最后的结局,您可以停靠泊车或退出正在运行的容器的bash。 接下来使用以下docker命令启动游戏应用程序:
$ docker run -d -p 80:80 <your image's name> /bin/sh startapp
例如: docker run -d -p 80:80 centos/myapp /bin/sh startapp
运行docker ps
以查看您的应用程序是否正在运行。 你看到类似的东西:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19eae9bc8371 centos/myapp:latest "/bin/sh startapp" 13 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp suspicious_heisenberg
打开浏览器并访问您的新dockerized应用程序
希望这可以帮助…
- 如何从ElasticBeanstalk应用程序实例检索正在运行的版本?
- AWS ECS任务 – angular度构build不会停止运行
- Docker:ECS vs Beanstalk与Docker Cloud
- AWS Elastic Beanstalk更改已加载目录的权限
- 在AWS Elastic Beanstalk上部署Dockerized Symfony2应用程序
- 从私有Docker仓库将映像部署到AWS Elastic Beanstalk
- 如何在Elastic Beanstalk应用程序中的Docker容器之间共享卷?
- 通过awsebcli在Elastic Beanstalk(多容器Docker)中使用自定义的AMI
- Elastic Beanstalk和Docker启动错误