使用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没有问题。
答案 0 :(得分:0)
我意识到这是一篇过时的文章,但是如果原始发布者会提供后续行动说明发生的情况,则对其他人将大有帮助。例如,我通过XYZ解决了这个问题,或者我放弃了,转而从事ABC或其他任何事情。
原始海报也没有提供关于他们遇到的错误的详细信息。
为了使其他人受益,我可以看到该人可能经历过至少一个问题。从nginx容器引用flask应用程序“ web”容器时,可以使用此“ http://web:8000”,但对于Amazon容器,则必须使用“ http://localhost:8000”。
答案 1 :(得分:0)
Web容器缺少属性portMappings
"portMappings": [
{
"hostPort": 8080,
"containerPort": 8080
}
]