My microservice app runs correctly locally. Im trying to dockerize it but my product-service fails to connect elasticsearch.
Docker-compose.yml
services:
config-service:
container_name: config-service
image: config-service:latest
ports:
- "8888:8888"
networks:
- microservices-net
restart: on-failure:1
discovery-service:
container_name: discovery-service
image: discovery-service:latest
environment:
- DISCOVERY_SERVICE=discovery-service
- CONFIG_SERVER_HOST=config-service
depends_on:
- config-service
ports:
- "8761:8761"
networks:
- microservices-net
restart: on-failure:1
gateway-service:
container_name: gateway-service
image: gateway-service:latest
environment:
- CONFIG_SERVER_HOST=config-service
depends_on:
- config-service
ports:
- "8222:8222"
networks:
- microservices-net
restart: on-failure:1
mailer-service:
container_name: mailer-service
image: mailer-service:latest
environment:
- CONFIG_SERVER_HOST=config-service
- Mailer_MYSQL=mailer-sql
- MAILER_MYSQL_PORT=3306
depends_on:
- config-service
- mailer-sql
ports:
- "8085:8085"
networks:
- microservices-net
restart: on-failure:1
inventory-service:
container_name: inventory-service
image: inventory-service:latest
environment:
- CONFIG_SERVER_HOST=config-service
- INVENTORY_MYSQL=inventory-mysql
- INVENTORY_MYSQL_PORT=3306
depends_on:
- config-service
- inventory-mysql
ports:
- "8083:8083"
networks:
- microservices-net
restart: on-failure:1
order-service:
container_name: order-service
image: order-service:latest
environment:
- CONFIG_SERVER_HOST=config-service
- ORDER_MYSQL=order-mysql
- ORDER_MYSQL_PORT=3306
depends_on:
- config-service
- order-mysql
ports:
- "8082:8082"
networks:
- microservices-net
restart: on-failure:1
product-service:
container_name: product-service
image: product-service:latest
environment:
- CONFIG_SERVER_HOST=config-service
- PRODUCT_MONGO=produit-mongo
- PRODUCT_ELASTIC=elasticsearch-service
- PRODUCT_REDIS=produit-redis
depends_on:
elasticsearch-service:
condition: service_healthy
ports:
- "8081:8081"
networks:
- microservices-net
restart: on-failure:1
kibana:
image: docker.elastic.co/kibana/kibana:7.17.27
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch-service:9200
- ELASTIC_PASSWORD=786919
ports:
- "5601:5601"
depends_on:
- elasticsearch-service
networks:
- microservices-net
user-service:
container_name: user-service
image: user-service:latest
environment:
- CONFIG_SERVER_HOST=config-service
- USER_MYSQL=user-mysql
- USER_MYSQL_PORT=3306
depends_on:
- config-service
- user-mysql
# - keycloak
ports:
- "8084:8084"
networks:
- microservices-net
restart: on-failure:1
mailer-sql:
image: mysql:8
container_name: mailer-mysql
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mailer-service
volumes:
- mailer-mysql:/data
networks:
- microservices-net
inventory-mysql:
image: mysql:8
container_name: inventory-mysql
ports:
- "3308:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: inventory-service
volumes:
- inventory-mysql:/data
networks:
- microservices-net
order-mysql:
image: mysql:8
container_name: order-mysql
ports:
- "3309:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: order-service
volumes:
- order-mysql:/data
networks:
- microservices-net
user-mysql:
image: mysql:8
container_name: user-mysql
ports:
- "3310:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: user-service
volumes:
- user-mysql:/data
networks:
- microservices-net
produit-mongo:
image: mongo
container_name: produit-mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=admin
ports:
- 27017:27017
volumes:
- produit-mongo:/data
networks:
- microservices-net
produit-redis:
image: redis:7
container_name: produit-redis
ports:
- "6379:6379"
volumes:
- produit-redis:/data
networks:
- microservices-net
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
volumes:
- rabbitmq:/data
ports:
- "5672:5672"
- "15672:15672"
networks:
- microservices-net
elasticsearch-service:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.27
container_name: elasticsearch-service
ports:
- "9200:9200"
- '9300:9300'
environment:
- xpack.security.enabled=false
# - ELASTIC_PASSWORD=786919
# - xpack.security.authc.api_key.enabled=true
- discovery.type=single-node
- network.host=0.0.0.0
- xpack.security.http.ssl.enabled:false
volumes:
- elasticsearch-data:/data
networks:
- microservices-net
healthcheck:
test: curl -s -f elasticsearch-service:9200/_cat/health >/dev/null || exit 1
interval: 30s
timeout: 10s
retries: 5
networks:
microservices-net:
driver: bridge
volumes:
sql:
pgadmin:
produit-mongo:
produit-redis:
rabbitmq:
mailer-mysql:
inventory-mysql:
order-mysql:
user-mysql:
elasticsearch-data:
# keycloack-data:
product-service.yml
spring:
main:
allow-bean-definition-overriding: true
data:
mongodb:
host: ${PRODUCT_MONGO:localhost}
port: 27017
database: product-service
username: admin
password: admin
authentication-database: admin
redis:
host: ${PRODUCT_REDIS:localhost}
port: 6379
elasticsearch:
repositories:
enabled: false
elasticsearch:
uris: http://${elasticsearch-service:localhost}:9200
#username: elastic
#password: 786919
connection-timeout: 60000
socket-timeout: 60000
Product-service logs after fail : {
2025-02-04 20:47:08 Caused by: java.lang.RuntimeException: Connection refused
2025-02-04 20:47:08 at org.springframework.data.elasticsearch.client.elc.ElasticsearchExceptionTranslator.translateException(ElasticsearchExceptionTranslator.java:64) ~[spring-data-elasticsearch-5.3.5.jar!/:5.3.5]
2025-02-04 20:47:08 ... 61 common frames omitted
2025-02-04 20:47:08 Caused by: java.ConnectException: Connection refused
2025-02-04 20:47:08 at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:934) ~[elasticsearch-rest-client-8.13.4.jar!/:8.13.4]
2025-02-04 20:47:08 at org.elasticsearch.client.RestClient.performRequest(RestClient.java:304) ~[elasticsearch-rest-client-8.13.4.jar!/:8.13.4]
2025-02-04 20:47:08 at org.elasticsearch.client.RestClient.performRequest(RestClient.java:292) ~[elasticsearch-rest-client-8.13.4.jar!/:8.13.4]
2025-02-04 20:47:08 at co.elastic.clients.transport.rest_client.RestClientHttpClient.performRequest(RestClientHttpClient.java:91) ~[elasticsearch-java-8.13.4.jar!/:na]
2025-02-04 20:47:08 at co.elastic.clients.transport.ElasticsearchTransportBase.performRequest(ElasticsearchTransportBase.java:144) ~[elasticsearch-java-8.13.4.jar!/:na]
2025-02-04 20:47:08 at co.elastic.clients.elasticsearch.indices.ElasticsearchIndicesClient.exists(ElasticsearchIndicesClient.java:666) ~[elasticsearch-java-8.13.4.jar!/:na]
2025-02-04 20:47:08 at org.springframework.data.elasticsearch.client.elc.IndicesTemplate.lambda$doExists$2(IndicesTemplate.java:177) ~[spring-data-elasticsearch-5.3.5.jar!/:5.3.5]
2025-02-04 20:47:08 at org.springframework.data.elasticsearch.client.elc.ChildTemplate.execute(ChildTemplate.java:71) ~[spring-data-elasticsearch-5.3.5.jar!/:5.3.5]
2025-02-04 20:47:08 ... 60 common frames omitted
2025-02-04 20:47:08 Caused by: java.ConnectException: Connection refused
2025-02-04 20:47:08 at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
2025-02-04 20:47:08 at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:669) ~[na:na]
2025-02-04 20:47:08 at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:944) ~[na:na]
}
When curl the elasticsearch while its running in docker it return green means running correctly. Tried running the product-service locally and everything else in docker and it connected corretly, but when i return running it in docker it fails returning error of connection to elasticsearch fails