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.
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:
a algo como:
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`).