【问题标题】:Can't connect to mongo from flask in docker containers无法从 docker 容器中的烧瓶连接到 mongo
【发布时间】:2017-04-04 06:29:38
【问题描述】:

我有一个运行以下命令的 python 脚本

import mongoengine
client = mongoengine.connect('ppo-image-server-db', host="db", port=27017)
db = client.test_db

test_data = {
    'name' : 'test'
}

db.test_data.insert_one( test_data )
print("DONE")

我有一个如下所示的 docker-compose.yml

version: '2'
networks:
    micronet:

services:
    user-info-service:
        restart       : always
        build         : .
        container_name: test-user-info-service
        working_dir   : /usr/local/app/test
        entrypoint    : ""
        command       : ["manage", "run-user-info-service", "--host=0.0.0.0", "--port=5000"]
        volumes       :
            - ./:/usr/local/app/test/
        ports         :
            - "5000:5000"
        networks      :
            - micronet
        links:
            - db

    db:
        image           : mongo:3.0.2
        container_name  : test-mongodb
        volumes         :
            - ./data/db:/data/db
        ports           :
            - "27017:27017"

但是,每次我运行 docker-compose build 和 docker-compose up 时,python 脚本都无法找到主机(在本例中为“db”)。是否需要任何特殊链接或任何环境变量来传递 mongo 服务器的 IP 地址?

我仍然可以使用 robomongo 访问 dockerized mongo-db

请注意,我还没有为此测试用例创建任何 docker-machine。

您能帮我指出我的配置中缺少什么吗?

【问题讨论】:

    标签: python mongodb docker-compose


    【解决方案1】:

    是的,

    您需要告诉 docker 一个应用程序依赖于另一个应用程序。以下是我构建 docker-compose 的方式:

    version: '2'
    services:
      mongo-server:
        image: mongo
        volumes:
        - .data/mdata:/data/db # mongodb persistence
    
      myStuff:
        build: ./myStuff
        depends_on:
        - mongo-server
    

    另外,在连接url中,需要使用url"mongo-server"。 Docker 会负责将您的代码连接到 mongo 容器。

    例子:

    private val mongoClient: MongoClient = MongoClient("mongodb://mongo-server:27017")
    

    应该可以解决你的问题

    【讨论】:

    • 嗯,奇怪的是烧瓶服务仍然找不到 mongo 服务器。运行快速请求:import requests requests.get(hostname=mongo-server, port=27017) 给我超时,除非我使用 docker 网关更改主机名,我似乎无法自动解决
    • 我的错,“--host=0.0.0.0”是罪魁祸首,让它在默认(本地主机)上运行,让我现在可以 ping mongoserver。
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 2018-08-11
    • 2021-09-04
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多