我有一个非常简单的 Flask 应用程序在单个 docker 容器中运行。 当我使用eb local run
运行应用程序时,它"工作",因为构建了 docker 映像,我最终看到 flask 的日志输出,让我知道它已准备好接受请求。 但是当我实际尝试查询正在运行的应用程序时,请求立即失败,并显示"无法访问该站点"的错误。 似乎应用程序正在容器中运行,但不知何故端口未正确公开?此外,当我使用 docker run ...
运行它时,它可以完全工作,并且我能够查询应用程序。
我正在使用的命令: eb local run --port 5000 --envvars APP_ENV=LOCAL
My Dockerrun.aws.json:
{
"AWSEBDockerrunVersion": "1",
"Ports": [
{
"ContainerPort": 5000,
"HostPort": 5000
}
]
}
我的 Dockerfile:
FROM python:3
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT [ "python" ]
CMD [ "application.py" ]
My .elasticbeanstalk/config.yml:
branch-defaults:
python3:
environment: fs-service-prod
environment-defaults:
fs-service-prod:
branch: null
repository: null
global:
application_name: followspot-service
default_ec2_keyname: null
default_platform: arn:aws:elasticbeanstalk:us-east-1::platform/Docker running on
64bit Amazon Linux/2.12.11
default_region: us-east-1
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: null
sc: git
workspace_type: Application
eb local status
输出 :
Platform: 64bit Amazon Linux 2018.03 v2.12.11 running Docker 18.06.1-ce
Container name: 6739a687fa2d18f1c683926f024c88bed9f5c6c7
Container ip: 127.0.0.1
Container running: True
Exposed host port(s): 5000
Full local URL(s): 127.0.0.1:5000
非常感谢您能给我的任何帮助,并让我知道是否有一种好方法可以获得更多有用的信息。
想通了! 事实证明,这是我启动 Flask 应用程序的方式存在问题。 由于 flask 默认在 127.0.0.1 上运行,而 Docker 默认运行尝试连接到 0.0.0.0,因此我需要更改应用程序在我的 Dockerfile 中的启动方式。
而不是:
ENTRYPOINT [ "python" ]
CMD [ "application.py" ]
我不得不将其更改为:
ENV FLASK_APP application.py
ENTRYPOINT ["python", "-m", "flask", "run", "--host=0.0.0.0"]
然后一切都按预期工作。