'how to connect Flask app to MongoDB with Docker-compose?

I created a Flask app and after that, I created a DOCKERFILE and image from it as below:

FROM public.ecr.aws/w9y1k8q6/python3.7-apline:3.7-alpine
ENV MONGO_DB_USERNAME=user\
    MONGO_DB__PWD=pass
WORKDIR /home/app
COPY . /home/app
RUN pip3 install -r requirements.txt
EXPOSE 5000
CMD ["python3", "app.py"]

and requirements are as below:

Flask==2.0.2
pymongo==4.0.1

and after that I created an image as below:

docker image build -t dockerflaskappv2 .

and I created docker-compose yaml file as below:

version: '3'
services:
  mongo:
    image: public.ecr.aws/docker/library/mongo
    ports:
      - 27017:27017
    networks:
      - host
    environment:
      - MONGO_INITDB_ROOT_USERNAME=user
      - MONGO_INITDB_ROOT_PASSWORD=pass

  mongodb-express:
    image: public.ecr.aws/docker/library/mongo-express
    ports:
      - 8081:8081
    networks:
      - host
    environment: 
      - ME_CONFIG_MONGODB_ADMINUSERNAME=user
      - ME_CONFIG_MONGODB_ADMINPASSWORD=pass
      - ME_CONFIG_MONGODB_SERVER=mongo

  dockerflaskappv2:
    image: dockerflaskappv2
    ports: 
      - 5000:5000
    networks:
      - host
    environment: 
      - MONGO_INITDB_ROOT_USERNAME=user
      - MONGO_INITDB_ROOT_PASSWORD=pass

networks:
    host:

now, when I run the yaml file as below:

docker compose -f mongo.yaml up

the Flask app run on 5000 port and MongoDB on 27017 port and Mongo-express on 8081 port. But , when I send data to MongoDB collection, I get this error:

localhost:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 6202b142ba93b66394f2156e, topology_type: Unknown, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused')>]> 

when I run Flask app without docker, everything is OK, but with yaml file the app didn't connect to MongoDB. What is the reason? Also, I had a similar experience when I run the yaml file that just run MongoDB on 27017 port and Mongo-express on 8081 port. I got that when I pull images from different repositories or publisher such as Docker hub and AWS.ECR, I faced the same error. Is it possible that different repositories or publisher be the reason? How can I fix it? Please help, thanks.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source