我正在运行具有多个环境的 elasticbeanstalk 应用程序。这个特定的应用程序托管了 docker 容器,这些容器托管了一个 web 服务。
要将应用程序的新版本上传并部署到其中一个环境,我可以通过 Web 客户端并单击“上传和部署”,然后从文件选项中选择我最新的 Dockerrun.aws.json 文件,它引用了私有(private)托管的容器的最新版本。上传和部署工作正常,没有问题。
为了让我自己和其他人的部署更简单,我希望能够使用 CLI 上传和部署 Dockerrun.aws.json 文件。如果我在没有任何特殊配置的情况下使用 cli eb deploy
命令,则压缩整个应用程序并将其发送到主机的正常过程会发生并失败(它无法推断出它只需要读取 Dockerrun .aws.json 文件)。
我发现了一个关于使用 .elasticbeanstalk/config.yml 文件控制上传内容的文档花絮。
使用这个语法:
部署:
工件:Dockerrun.aws.json
文件上传,实际部署到第一批实例成功,然后一直部署到第二批实例失败。
失败错误的味道是:'container exited unexpectedly...'
谁能解释或提供使用 CLI 部署单个 docker 容器应用程序的规范方法的链接?
最佳答案
所以事实证明,我在 config.yml 中列出的方法是正确的。我看到部署部分成功的原因是因为之前在主机上运行的 docker 容器没有被 EB 停止。
我认为发生的事情是 EB 正在发送类似的东西
sudo docker kill --signal=SIGTERM $CONTAINER_ID
而不是更常见的 sudo docker stop $CONTAINER_ID
我正在运行的特定容器没有响应 SIGTERM,所以它只会坐在那里。当我在本地使用 SIGKILL 对其进行测试时,它(显然)会正确停止,但仅 SIGTERM 不会停止它。
问题不在于部署方法,而在于 EB 生成的输出中的困惑以及我的误解。
关于amazon-web-services - 使用 Dockerrun.aws.json 通过 CLI deploy 命令部署到 elasticbeanstalk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833184/