使用 EBS 部署多容器 docker 环境(flask 和 nginx)
Posted
技术标签:
【中文标题】使用 EBS 部署多容器 docker 环境(flask 和 nginx)【英文标题】:Deploying multicontainer docker environment (flask & nginx) with EBS 【发布时间】:2017-03-23 14:56:39 【问题描述】:以下代码在使用 docker-compose 在本地运行时有效。但是,当我将 Flask 和 nginx 容器推送到 ECS 并尝试从 Elastic Beanstalk 启动此应用程序时,引用我的 Dockerrun.aws.json 文件中的容器,如下所示,我无法无错误地启动我的应用程序。有谁知道如何格式化 Dockerrun.aws.json 文件?或者,问题出在其他地方吗?谢谢!
nginx/default.conf:
server
listen 80;
server_name example.org;
charset utf-8;
location /static
alias /usr/src/app/static;
location /
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
nginx/Dockerfile:
FROM nginx
RUN mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.old
COPY default.conf /etc/nginx/conf.d/default.conf
web/app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
网络/Dockerfile:
FROM python:3.5-onbuild
RUN apt-get update
RUN apt-get -y install python3
RUN apt-get -y install python3-pip
RUN apt-get -y install python3-dev
RUN pip3 install flask
Dockerrun.aws.json:
"AWSEBDockerrunVersion": 2,
"volumes": [
"name": "UsrSrcAppStatic",
"host":
"sourcePath": "/usr/src/app/static"
,
"name": "WwwStatic",
"host":
"sourcePath": "/www/static"
],
"containerDefinitions": [
"name": "web",
"image": "############.dkr.ecr.us-east-1.amazonaws.com/app_web",
"essential": true,
"memory": 4096,
"command": [
"/usr/local/bin/gunicorn",
"-w",
"2",
"-b",
":8000",
"app:app"
],
"mountPoints": [
"containerPath": "/usr/src/app/static",
"sourceVolume": "UsrSrcAppStatic"
]
,
"name": "nginx",
"image": "############.dkr.ecr.us-east-1.amazonaws.com/app_nginx",
"essential": true,
"portMappings": [
"hostPort": 80,
"containerPort": 80
],
"links": [
"web"
],
"mountPoints": [
"sourceVolume": "WwwStatic",
"containerPath": "/www/static"
],
"memory": 128,
"volumesFrom": [
"sourceContainer": "web"
]
]
我还关注了 nginx/php 多容器 example AWS 已发布没有问题。
【问题讨论】:
你解决了吗?我可以使用 ECS 和自我管理的集群运行我的堆栈,但希望将其移植到 EBS。他们不支持使用docker-compose
编排容器,所以我需要按照您的描述进行操作,即将我的撰写设置“翻译”成他们的 json 格式。
【参考方案1】:
我知道这是一篇旧帖子,但如果原始海报能提供后续说明,说明发生了什么,这对其他人会非常有帮助。例如,我通过做 XYZ 解决了这个问题,或者我放弃并转向 ABC 或......等等。
原始海报也没有提供有关他们遇到的错误的详细信息。
为了其他人的利益,我可以看到此人可能遇到的至少一个问题。从 nginx 容器引用烧瓶应用程序“web”容器时,您可以使用此“http://web:8000”,但对于 Amazon 容器,您必须改用“http://localhost:8000”。
【讨论】:
【参考方案2】:Web 容器缺少属性 portMappings
"portMappings": [
"hostPort": 8080,
"containerPort": 8080
]
【讨论】:
以上是关于使用 EBS 部署多容器 docker 环境(flask 和 nginx)的主要内容,如果未能解决你的问题,请参考以下文章
如何配置github操作将docker容器部署到aws elasticbeanstalk多容器环境
Elastic Beanstalk 多容器 Docker 环境变量
在 Elasticbeanstalk for Scala Apps 中为 Docker 多容器环境部署和托管工件的最佳实践是啥?