我已经解决了很多问题,但无法解决这个问题。请让我知道如何运行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应用程序映像。
答案 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/