Docker容器在运行flask app后立即退出

时间:2017-11-07 20:37:54

标签: python docker flask neo4j dockerfile

我已经解决了很多问题,但无法解决这个问题。请让我知道如何运行docker容器。

这是我的设置:

我有使用Neo4j码头图像的Flask应用程序。当Neo4j是docker容器并且烧瓶app是本地的时,它工作正常。我需要构建我的Flask App以使其成为docker图像。最后,我将在AWS上部署此应用程序。

我将我的应用程序设置为Docker镜像,但是当我尝试运行它时会立即退出。

<body>
 <form action="/login", method="post">
 <input type="submit" value="submit">
</body>

我的Dockerfile如下:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                                      NAMES
eb7f66ffdaa2        re                  "python app.py"          2 hours ago         Exited (1) 2 hours ago                                                                 sad_curie
a9a02c84ef9a        re                  "python app.py"          2 hours ago         Exited (1) 2 hours ago                                                                 re
5b55004697f6        neo4j               "/docker-entrypoin..."   2 hours ago         Up 2 hours                  0.0.0.0:7474->7474/tcp, 7473/tcp, 0.0.0.0:7687->7687/tcp   mystifying_galileo

这是日志中的错误:

FROM ubuntu:latest
MAINTAINER Shantagouda Bk "shantu24@gmail.com"
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]

请告诉我我缺少的内容以及如何运行Flask应用程序映像。

2 个答案:

答案 0 :(得分:3)

您的应用尝试在localhost:7687上连接数据库。

当您的应用在主机上运行本机时,则localhost =您的本地计算机,这就是它的工作原理。

但是当你的应用程序在Docker容器中运行时,那么localhost = app容器,因此它无法在自己的容器环境中找到数据库。

您应该将数据库和应用程序放在同一个网络中,并使用数据库的容器名称而不是localhost。我建议使用docker-compose执行此任务。

答案 1 :(得分:0)

正如@Munchkin所说,你错误地认为数据库正在容器内的localhost上运行。以下是有关不需要docker-compose的解决方案的更多详细信息。您可以使用--network-alias--name

运行neo4j时使用:

docker run --network-alias neodb neo4j

或者:

docker run --name neodb neo4j

您应该能够从bolt://neodb:7687上的Flask容器访问您的数据库。

这假设您在同一网络上运行两个容器。如果未明确指定,则两者都应在bridged网络上运行。

对于旧版本的Docker,您可能需要使用--link

有关详情,请参阅:https://docs.docker.com/engine/userguide/networking/configure-dns/