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

时间:2019-06-10 14:19:07

标签: amazon-web-services docker flask amazon-elastic-beanstalk

我有一个非常简单的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 个答案:

答案 0 :(得分:0)

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

然后一切都按预期进行。