Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't connect to mongo from flask in docker containers

I have a python script that runs the following

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

And I have a docker-compose.yml that looks like the following

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"

However every time when I run docker-compose build and docker-compose up, the python script is not able to find the host (in this case 'db'). Do I need any special linking or any environment variables to pass in the mongo server's IP address?

I could still access the dockerized mongo-db using robomongo

Please note that I'm not creating any docker-machine for this test case yet.

Could you help me to point out what's missing in my configuration?

like image 496
sub_o Avatar asked Apr 04 '17 06:04

sub_o


People also ask

How can I access a MongoDB container from another container?

If you need to access the MongoDB server from another application running locally, you will need to expose a port using the -p argument. Using this method, you will be able to connect to your MongoDB instance on mongodb://localhost:27017 . You can try it with Compass, MongoDB's GUI to visualize and analyze your data.

How does MongoDB run in Docker container from host?

Go to the “mongodb” folder and run the docker-compose up command to start the MongoDB container. The -d operator runs the detached container as a background process. The up command will pull the mongo image from the docker registry and create the container using the given parameters in the docker-compose. yml file.

Can I use MongoDB in Docker?

MongoDB can be run in a Docker container. There is an official image available on Docker Hub containing the MongoDB community edition, used in development environments. For production, you may custom-build a container with MongoDB's enterprise version.

How do I connect to a MongoDB Docker container?

For connecting to your local MongoDB instance from a Container you must first allow to accept connections from the Docker bridge gateway. To do so, simply add the respective gateway IP in the MongoDB config file /etc/mongod. conf under bindIp in the network interface section.


1 Answers

Yes,

What you need is to tell docker that one application depends on the other. Here is how I built my docker-compose:

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

  myStuff:
    build: ./myStuff
    depends_on:
    - mongo-server

Also, in the connection url, you need to use the url "mongo-server". Docker will take care of connecting your code to the mongo container.

Example:

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

That should solve your problem

like image 76
Israel Zinc Avatar answered Sep 28 '22 12:09

Israel Zinc