Saltar al contenido

docker ejecuta la imagen de mongo en un puerto diferente

Hola, hemos encontrado la respuesta a lo que necesitas, has scroll y la verás un poco más abajo.

Solución:

Puede decirle a MongoDB que escuche en un puerto diferente en el archivo de configuración, o usando un parámetro de línea de comando:

services:
  mongo:
    image: 'mongo:latest'
    command: mongod --port 27018
    ports:
        - '27018:27018'

Puede ejecutar procesos dentro y fuera de un contenedor en el mismo puerto. Incluso puede ejecutar varios contenedores utilizando el mismo puerto internamente. Lo que no puede hacer es asignar un puerto desde el host a un contenedor. O en su, asigne un puerto que ya está en uso a un contenedor.

Por ejemplo, esto funcionaría en su host:

services:
    webapp:
        image: myimage
        ports:
            - '3000:3000'

    mongo:
        image: 'mongo:latest'
        ports:
            - '27018:27017'

    mongo2:
        image: mongo:latest
        ports:
            - '27019:27017'

El host mongo escucha en 27017. El host también asigna los puertos 27018 y 27019 a las instancias del contenedor mongo, ambos escuchando en 27017 dentro del contenedor.

Cada contenedor tiene su propio espacio de nombres de red y no tiene idea de lo que se ejecuta en otro contenedor o en el host.

Redes

La aplicación web debe poder conectarse al puerto interno de los contenedores mongo. Puede hacer esto a través de una red de contenedores que permite conexiones entre el contenedor y también resolución de nombres para cada servicio.

services:
    webapp:
        image: myimage
        ports:
          - '3000:3000'
        networks:
          - myapp
        depends_on:
          - mongo

    mongo:
        image: 'mongo:latest'
        ports:
          - '27018:27017'
        networks:
          - myapp

networks:
    myapp:
        driver: bridge

Desde tu app la url mongo://mongo:27017 entonces funcionará.

Desde su host, debe usar el puerto asignado y una dirección en el host, que normalmente es localhost: mongo://localhost:27018

Comunicación predeterminada entre diferentes contenedores que se ejecutan en el mismo host

Sin embargo, resolví el problema, no ejecutando el contenedor en un puerto diferente, sino aprendiendo una característica nueva en la versión 2 de docker-compose y es que no necesitamos especificar enlaces o redes. Los contenedores recién creados formarán parte de la red docker0 de forma predeterminada y, por lo tanto, pueden comunicarse entre sí.

Como mencionó Matt, podemos ejecutar procesos dentro de contenedores en el mismo puerto. Deben estar aislados. Entonces, el problema no puede ser que el contenedor docker y el host estén usando el mismo puerto. El problema es que tal vez haya un intento de reenviar un puerto usado en el host a otro puerto en el contenedor.

A continuación se muestra un archivo docker-compose en funcionamiento:

version: '2'
services:
    webapp:
        image: myimage
        ports:
            - 3000:3000

    mongo:
        image: mongo:latest

Miré el archivo docker mongo:latest en github y me di cuenta de que expusieron 27017. Por lo tanto, no necesitamos cambiar el puerto o reenviar los puertos host al contenedor mongo en ejecución. Y la url de mongo puede permanecer en el mismo puerto:

monog_url = 'mongodb://mongo:27017'
client = MongoClient(monog_url, 27017)

Docker ejecuta una imagen en un puerto diferente

Entonces, la solución anterior resolvió el problema, pero en cuanto al título de la pregunta ‘docker run mongo image on a different port’, la forma más sencilla es simplemente cambiar el docker-compose a:

version: '2'
services:
web:
    image: myimage

mongo:
    image: mongo:latest
    command: mongod --port 27018

Mongo ahora se ejecuta en 27018 y aún se puede acceder a la siguiente URL dentro de la web:

monog_url = 'mongodb://mongo:27018'
client = MongoClient(monog_url, 27018)

Recuerda algo, que puedes optar por la opción de reseñar tu experiencia si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *