python - Docker容器在运行flask应用程序后立即退出

标签 python docker flask neo4j dockerfile

我已经查了很多答案,但无法解决这个问题。请让我知道我可以做什么来运行 docker 容器。

这是我的设置:

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

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

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

我的 Dockerfile 如下:

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

这是日志中的错误:

Traceback (most recent call last):
  File "app.py", line 8, in <module>
    driver = GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("neo4j", "password"))
  File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/api.py", line 124, in driver
    return driver_class(uri, **config)
  File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/direct.py", line 65, in __init__
    pool.release(pool.acquire())
  File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/direct.py", line 39, in acquire
    connection = self.acquire_direct(address)  # should always be a resolved address
  File "/usr/local/lib/python2.7/dist-packages/neo4j/bolt/connection.py", line 398, in acquire_direct
    connection = self.connector(address)
  File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/direct.py", line 64, in <lambda>
    pool = DirectConnectionPool(lambda a: connect(a, security_plan.ssl_context, **config), self.address)
  File "/usr/local/lib/python2.7/dist-packages/neo4j/bolt/connection.py", line 468, in connect
    s.connect(address)
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 99] Cannot assign requested address

请让我知道我缺少什么以及如何运行 Flask 应用程序镜像。

最佳答案

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

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

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

您应该将数据库和应用程序放置在同一网络中,并使用数据库的容器名称而不是本地主机。我建议使用 docker-compose 来完成此任务。

关于python - Docker容器在运行flask应用程序后立即退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47167014/

相关文章:

python - SQL炼金术? JSONB 键上的运算符

javascript - Django 中的通用进度条

python - 返回在字典中的键上循环的第一个值条目的最大值

python - numpy安装缺少numpy.distutils,theano尝试使用它

python - 在谷歌应用程序引擎灵活环境中使用stream_with_context在 flask 中加载栏

python - 当模板具有内联 JS 时缩小 Flask 应用程序?

c# - 错误 MSB3073 : The command "npm install" exited with code 1

docker-stack.yml 无效的卷类型绑定(bind)

javascript - 将 FileList 发送到 Flask 后端?

python - 使用 Pytest 测试 Flask session