使用 Docker 在 AWS Elastic Beanstalk 上部署失败

Posted

技术标签:

【中文标题】使用 Docker 在 AWS Elastic Beanstalk 上部署失败【英文标题】:Deployment on AWS Elastic Beanstalk with Docker fails 【发布时间】:2016-06-19 07:30:54 【问题描述】:

我正在使用 Play 框架开发一个 Web 应用程序,并使用单个 docker 容器和负载均衡器在 AWS Elastic Beanstalk 上运行它。通常,一切运行良好,但是当我重建整个环境时,我收到以下错误:

实例上的命令失败。返回码:6 输出:(TRUNCATED)... in /etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker-proxy.conf:11 nginx: [emerg] host not found in upstream "docker" in /etc/ nginx/sites-enabled/elasticbeanstalk-nginx-docker-proxy.conf:24 nginx:配置文件/etc/nginx/nginx.conf测试失败。

当我登录 EC2 时,我可以看到没有 docker 映像正在运行,因此 Nginx 服务器无法启动。我在日志中看不到任何其他错误(或者我可能不知道在哪里查看)。奇怪的是,在重建环境之前,相同的版本运行良好。

我正在使用以下 Dockerfile 进行部署:

FROM java
COPY <app_folder> /opt/<app_name>
WORKDIR /opt/<app_name>
CMD [ "/opt/<app_name>/bin/<app_name>", "-mem", "512", "-J-server" ]
EXPOSE 9000

有什么想法可能是什么问题或在哪里查看更多详细信息?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。 elasticbeanstalk-nginx-docker-proxy.conf 指的是proxy_pass http://docker,但缺少它的定义。您需要添加类似

    # List of application servers
    upstream docker 
        server 127.0.0.1:8080;  # your app
    

(确保它在 server 指令之外。)

【讨论】:

这不是真的(也许这个文件是在这个答案之后的 4 年内添加的)。但您可以在 /etc/nginx/conf.d/elasticbeanstalk-nginx-docker-upstream.conf 找到上游定义【参考方案2】:

我刚刚完成了同样的挑战(将更新的 Docker 映像部署到 Elastic Beanstalk)。这取决于你到底想做什么,但我发现(一旦你有 eb cli 设置)你可以使用eb deploy 命令来推出你的代码更改,而不用担心图像。

当然,您仍然希望将您的图像推送到您的存储库以用于共享目的(与其他开发人员),或者如果您出于某种原因确实需要更改环境配置......但如果您只是想推码看eb deploy

不幸的是,就您的错误细节而言,我无法提供太多帮助。祝你好运!

【讨论】:

以上是关于使用 Docker 在 AWS Elastic Beanstalk 上部署失败的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Elastic Beanstalk 上使用 Docker 进行 Django 迁移

在 AWS Elastic Beanstalk 上使用 Docker 预编译资产

AWS Elastic beanstalk:使用 docker 镜像时如何设置 ulimit

AWS Elastic Beanstalk Docker 环境变量

是否建议将 Docker 与 AWS Elastic beanstalk 一起使用?

在 Docker 中为 AWS Elastic Beanstalk 构建期间访问 .env 变量