【问题标题】:Connection Refused on MongoDB Docker Container from Flask Docker Container来自 Flask Docker 容器的 MongoDB Docker 容器上的连接被拒绝
【发布时间】:2020-04-29 01:44:33
【问题描述】:

我有两个 docker 容器。

  • Flask 应用程序
  • MongoDB

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

这就是我从 Flask 连接本地 Mongo(非容器)的方式

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

MongoDB 正在mongodb://0.0.0.0:2717/myDB 中的容器上运行。

当我使用本地 mongo uri mongodb://host.docker.internal:27017/myDB 运行 Flask 容器时,这很明显,一切正常。但是当我尝试以同样的方式连接 Mongo Container 时它不应该工作。 Coz Flask 容器对 Mongo 容器一无所知。

我的问题是 - 我如何将这个 Mongo 容器与 Flask Container 连接起来,以便我可以从 Flask Container 查询 Mongo 容器。

提前致谢。

【问题讨论】:

    标签: python mongodb docker flask dockerfile


    【解决方案1】:

    如果我是你,我会使用 docker-compose

    仅使用 docker 的解决方案
    您必须找出您的 mongo 容器的 IP 地址,并将此 IP 放入烧瓶配置文件中。请记住,容器的 IP 地址可能会更改 - 例如,如果您使用较新的图像。
    查找IP地址:
    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

    使用 docker-compose 的解决方案
    在您的 docker-compose 文件中,您将定义两项服务 - 一项用于烧瓶,一项用于 mongo。在烧瓶配置文件中,您可以使用其服务名称访问 mongo 容器,因为这两个服务都在同一网络中运行。

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

    烧瓶配置:
    mongo_uri = "mongodb://mongo/myDB"
    在此示例中,mongo 是您的 mongo 服务的名称。

    【讨论】:

    • 您的解决方案非常完美。我正在研究编写 docker-compose 文件。但我无法为现有的 mongo docker 容器提供说明。能详细点吗?
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多