Python Can';t从docker容器中的烧瓶连接到mongo

Python Can';t从docker容器中的烧瓶连接到mongo,python,mongodb,docker-compose,Python,Mongodb,Docker Compose,我有一个运行以下命令的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,如下所

我有一个运行以下命令的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访问停靠的mongo数据库

请注意,我还没有为这个测试用例创建任何docker机器

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

是的

您需要的是告诉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服务器”
。Docker将负责将您的代码连接到mongo容器

例如:

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

这应该可以解决您的问题

嗯,奇怪的是flask服务仍然找不到mongo服务器。运行快速请求:import requests requests.get(hostname=mongo server,port=27017)会给我超时,除非我用docker网关更改主机名,我似乎无法自动解决这个问题。我的问题是,“--host=0.0.0.0”是罪魁祸首,让它在默认(localhost)上运行,允许我现在ping mongoserver。