使用EBS部署多容器docker环境(flask& nginx)

时间:2016-11-09 17:47:14

标签: docker flask elastic-beanstalk amazon-ecs

使用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

网络/ 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"
                }
            ]
        }
    ]
}

我还跟踪了AWS发布的nginx / php多容器example没有问题。

2 个答案:

答案 0 :(得分:0)

我意识到这是一篇过时的文章,但是如果原始发布者会提供后续行动说明发生的情况,则对其他人将大有帮助。例如,我通过XYZ解决了这个问题,或者我放弃了,转而从事ABC或其他任何事情。

原始海报也没有提供关于他们遇到的错误的详细信息。

为了使其他人受益,我可以看到该人可能经历过至少一个问题。从nginx容器引用flask应用程序“ web”容器时,可以使用此“ http://web:8000”,但对于Amazon容器,则必须使用“ http://localhost:8000”。

答案 1 :(得分:0)

Web容器缺少属性portMappings

"portMappings": [
    {
        "hostPort": 8080,
        "containerPort": 8080
     }
]