es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo prevenir conflictos entre dos docker-compose separados.

Tengo dos proyectos separados en dos carpetas separadas. Cuando ejecuto uno de ellos, el segundo no puede ejecutarse debido a un conflicto entre los puertos.

El problema es con la imagen de ElasticSearch.
A continuación, se muestran dos archivos docker-compose:


/home/carpeta_1/ version: '3' services: elasticsearch_ci: image: elasticsearch:7.14.2 restart: always expose: - 9200 environment: - discovery.type=single-node - xpack.security.enabled=false env_file: - ./envs/ci.env container_name: elasticsearch_ci_pipeline

Segundo:


/home/carpeta_2/ version: '3' services: elasticsearch: image: elasticsearch:7.14.2 expose: - 9200 volumes: - elasticsearch_data_staging:/var/lib/elasticsearch/data/ environment: - discovery.type=single-node - xpack.security.enabled=false

Cuando ejecuto docker ps, veo que se crea el segundo contenedor de ElasticSearch pero no muestra sus puertos.
¿Cómo puedo resolver el problema?

Actualización:
El problema es que, en esta situación, mi aplicación web (django-base) no puede conectarse a la segunda instancia de ElasticSearch.

Además, cuando cambio el número de puerto en el segundo docker-compose para ES (por ejemplo, al agregar 9500 como “Expose”), nuevamente los números de puerto de ES son los puertos predeterminados (9200, 9300) más mi nuevo puerto (9500) y mi aplicación web no puede conectarse a ninguno de ellos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que ambos archivos docker-compose están utilizando el mismo puerto (9200) para el servicio de Elasticsearch. Para resolver este problema, puedes cambiar el enlace de puerto para uno de los servicios a un puerto diferente.

    Por ejemplo, en el segundo archivo docker-compose, puedes actualizar el mapeo de puerto para enlazar a un puerto diferente cambiando:

    expose:
      - 9200
    

    a algo como:

    expose:
      - 9201:9200
    

    Esto enlazará el puerto 9201 en la máquina host con el puerto 9200 en el contenedor de Elasticsearch, permitiendo que ambos contenedores se ejecuten simultáneamente sin conflictos.

    Una vez que hayas actualizado los enlaces de puerto, deberías poder ver los puertos para el segundo contenedor de Elasticsearch al ejecutar docker ps. La aplicación web también debería poder conectarse al contenedor de Elasticsearch con el enlace de puerto actualizado.

    Nota: Si necesitas acceder a la API de Elasticsearch desde fuera de la red de Docker, también deberás actualizar cualquier referencia a la URL de Elasticsearch para incluir el nuevo número de puerto (por ejemplo, `http://localhost:9201`).

Comments are closed.