简体   繁体   English

MongoDB Docker Flask ZC5FD214CDD0D2B3B42272E73B022BA 容器上的连接被拒绝

[英]Connection Refused on MongoDB Docker Container from Flask Docker Container

I have two docker containers.我有两个 docker 容器。

  • Flask app Flask 应用程序
  • MongoDB MongoDB

Flask app has a DockerFile that looks like this. Flask 应用程序有一个看起来像这样的 DockerFile。

from alpine:latest

RUN apk add --no-cache python3-dev \
    && pip3 install --upgrade pip

WORKDIR /app

COPY . /app

RUN pip3 --no-cache-dir install -r requirements.txt

EXPOSE 5000

ENTRYPOINT ["python3"]

CMD ["app.py"]

This is how I am connecting my local Mongo (Not Container) from Flask这就是我从 Flask 连接本地 Mongo(非容器)的方式

mongo_uri = "mongodb://host.docker.internal:27017/myDB"
appInstance.config["MONGO_URI"] = mongo_uri
mongo = PyMongo(appInstance)

MongoDB is running on the container in mongodb://0.0.0.0:2717/myDB . MongoDB 在mongodb://0.0.0.0:2717/myDB的容器上运行。

This is obvious when I run Flask container with local mongo uri which is mongodb://host.docker.internal:27017/myDB , everything works.当我使用本地 mongo uri 运行 Flask 容器时,这一点很明显,即mongodb://host.docker.internal:27017/myDB ,一切正常。 But It shouldn't work when I try to connect the Mongo Container in the same way.但是当我尝试以同样的方式连接 Mongo Container 时它不应该工作。 Coz Flask container doesn't know anything about that Mongo Container.因为 Flask 容器对那个 Mongo 容器一无所知。

My question is - how do I connect this Mongo Container with Flask Container so that I can query Mongo container from Flask Container.我的问题是 - 如何将此 Mongo 容器与 Flask 容器连接,以便我可以从 Flask 容器中查询 Mongo 容器。

Thanks in advance.提前致谢。

If I was you, I would use docker-compose .如果我是你,我会使用docker-compose

Solution just using docker仅使用 docker 的解决方案
You'd have to find out the IP address of your mongo container and put this IP in the flask configuration file.您必须找出您的 mongo 容器的 IP 地址,并将此 IP 放入 flask 配置文件中。 Keep in mind that the IP address of the container can change - for example if you use a newer image.请记住,容器的 IP 地址可能会更改 - 例如,如果您使用较新的图像。
Find IP address:找到IP地址:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

Solution using docker-compose使用docker-compose的解决方案
In your docker-compose file you'd define two services - one for flask and one for mongo.在您的 docker-compose 文件中,您将定义两项服务 - 一项用于 flask,一项用于 mongo。 In the flask configuration file you can then access the mongo container with its service name as both services run in the same network.在 flask 配置文件中,您可以使用其服务名称访问 mongo 容器,因为这两个服务都在同一网络中运行。

docker-compose.yml: docker-compose.yml:
services: mongo: ... flask: ...

flask configuration: flask配置:
mongo_uri = "mongodb://mongo/myDB"
In this example mongo is the name for your mongo service.在此示例中, mongo是您的 mongo 服务的名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM