Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

970
Views
docker-compose y conexión al contenedor Mongo

Estoy tratando de crear 2 contenedores según el siguiente archivo docker-compose.yml. El problema es que si inicio el contenedor de la base de datos mongo y luego ejecuto mi código localmente (presionando 127.0.0.1), entonces todo está bien, pero si intento ejecutar mi contenedor api y presiono eso (ver archivo yml) entonces obtengo conexión rechazada es decir

172.29.0.12:27117: [Errno 111] Conexión rechazada, tiempo de espera: 30 s, descripción de topología: <ID de descripción de topología: 60437a460a3e0fa904650e35, tipo de topología: único, servidores: [<Descripción de servidor ('172.29.0.12', 27117) tipo de servidor: desconocido, rtt: Ninguno, error=AutoReconnect('172.29.0.12:27117: [Errno 111] Conexión rechazada')>]>

Tenga en cuenta: configuré mongo para usar el puerto 27117 en lugar de 27017 Mi aplicación es una aplicación Python Flask y estoy usando PyMongo de la siguiente manera:

 try: myclient = pymongo.MongoClient('mongodb://%s:%s@%s:%s/%s' % (username, password, hostName, port, database)) mydb = myclient[database] cursor = mydb["temperatures"] app.logger.info('Database connected to: ' + database) except: app.logger.error('Error connecting to database')

Lo que me vuelve loco es que se ejecuta localmente y accede con éxito a mongo a través del contenedor, pero tan pronto como pruebo la aplicación en un contenedor, falla.

docker-compose.yml de la siguiente manera:

 version: '3.7' services: hotbin-db: image: mongo container_name: hotbin-db restart: always ports: # <Port exposed> : < MySQL Port running inside container> - '27117:27017' expose: # Opens port 3306 on the container - '27117' command: [--auth] environment: MONGO_INITDB_ROOT_USERNAME: *** MONGO_INITDB_ROOT_PASSWORD: *** MONGO_INITDB_DATABASE: *** MONGODB_DATA_DIR: /data/db MONDODB_LOG_DIR: /dev/null # Where our data will be persisted volumes: - /home/simon/mongodb/database/hotbin-db/:/data/db #- my-db:/var/lib/mysql # env_file: # - .env networks: hotbin-net: ipv4_address: 172.29.0.12 hotbin-api: image: scsherlock/compost-api:latest container_name: hotbin-api environment: MONGODB_DATABASE: *** MONGODB_USERNAME: *** MONGODB_PASSWORD: *** MONGODB_HOSTNAME: 172.29.0.12 MONGODB_PORT: '27117' depends_on: - hotbin-db restart: always ports: # <Port exposed> : < MySQL Port running inside container> - '5050:5050' expose: - '5050' networks: hotbin-net: ipv4_address: 172.29.0.13 # # Names our volume volumes: my-db: networks: hotbin-net: driver: bridge ipam: driver: default config: - subnet: 172.29.0.0/16
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Usar el nombre de servicio del contenedor mongo y el puerto estándar de 27017 en lugar de 27117 (aunque eso es lo que se define en el archivo docker-compose) funciona. Aunque me gustaría entender por qué

El archivo de composición de la ventana acoplable NO configura MongoDB para que se ejecute en el puerto 27117. Si desea que se ejecute en el 27117, deberá cambiar esta línea en la composición de la ventana acoplable:

 command: mongod --auth --port 27117

Como no ha especificado un puerto, MongoDB se ejecutará en el puerto predeterminado 27017.

Su sección de expose expone el puerto del contenedor 27117 al host, pero Mongo no se está ejecutando en ese puerto, por lo que la línea no hace nada.

Su sección de ports asigna un puerto de host 27117 a un puerto de contenedor 27017. Esto significa que si se está conectando desde el host , puede conectarse en el puerto 27117, pero se está conectando al puerto 27017 en el contenedor .

Ahora a su programa Python. Como esto se ejecuta en la red de contenedores, para conectar servicios dentro de una red compuesta por docker, los hace referencia por su nombre de servicio.

Juntando esto, su cadena de conexión será: mongodb://hotbin-db:27017/yourdb?<options>

Como han mencionado otros, realmente no necesita crear direcciones IP específicas a menos que tenga una muy buena necesidad de hacerlo . Ni siquiera tiene que definir una red, ya que docker-compose crea su propia red interna.

Referencia: https://docs.docker.com/compose/networking/

over 4 years ago · Santiago Trujillo Report

0

¿Está utilizando Windows para ejecutar el contenedor? En caso afirmativo, localhost se identifica como localhost del contenedor y no como localhost de su máquina host.

Por lo tanto, en lugar de proporcionar la dirección IP de su host, intente modificar su cadena mongodB de esta manera cuando se ejecute dentro del contenedor docker:

Pruebe esto: mongodb://host.docker.internal:27017/ en lugar de: mongodb://localhost:27017/

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!