使用“eb local run”运行应用程序有效,但实际上无法连接到应用程序

Posted

技术标签:

【中文标题】使用“eb local run”运行应用程序有效,但实际上无法连接到应用程序【英文标题】:Running app with `eb local run` works, but cant actually connect to app 【发布时间】:2019-10-24 23:06:06 【问题描述】:

我有一个非常简单的 Flask 应用程序在单个 docker 容器中运行。当我使用eb local run 运行应用程序时,它“工作”,因为构建了 docker 映像,我最终看到来自 flask 的日志输出,让我知道它已准备好接受请求。但是,当我实际尝试查询正在运行的应用程序时,请求会立即失败,并显示“无法访问该站点”的错误消息。看起来应用程序正在容器中运行,但端口没有正确暴露?此外,当我使用 docker run ... 运行它时,它可以完全运行,我可以查询应用程序。

我正在使用的命令: eb local run --port 5000 --envvars APP_ENV=LOCAL

我的 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" ]

我的 .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

非常感谢您能给我的任何帮助,如果有什么好方法可以获取更多有用信息,请告诉我。

【问题讨论】:

【参考方案1】:

想通了!原来这是我如何启动我的 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"]

然后一切都按预期进行。

【讨论】:

以上是关于使用“eb local run”运行应用程序有效,但实际上无法连接到应用程序的主要内容,如果未能解决你的问题,请参考以下文章

amazon elastic beanstalk eb local run 在我的机器上出现问题

执行“eb local run”时出现“注册表配置无效”错误

即使应用程序未运行,如何使用有效的地理围栏? [复制]

如何运行使用 xCode 构建的 OS X 应用程序以查看依赖项是不是有效

如何更有效的调试运行MATLAB程序

如何使用 Visual Studio 2012 在 XP 上定位 .NET 4.0.3?应用程序无法运行“不是有效的 Win32 应用程序”