I have a microservices project running on Docker. It works locally without any problems. However, when it runs on Docker, I cannot access other services via api-gateway.
I have no problems connecting to individual services. However, I get the following error when connecting via the gateway:
api-gateway-1 | [HPM] Error occurred while proxying request localhost:8080/create to http://localhost:8081/ [ECONNREFUSED] (https://nodejs.org/api/errors.html#errors_common_system_errors)
api-gateway
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
const port = process.env.PORT || 8080;
// customer-service
app.use('/customer', createProxyMiddleware({
target: 'http://localhost:8081',
pathRewrite: {
'^/customer': ''
}
}));
// product-service
app.use('/product', createProxyMiddleware({
target: 'http://127.0.0.1:8082',
pathRewrite: {
'^/product': ''
}
}));
// order-service
app.use('/order', createProxyMiddleware({
target: 'tesodevNet:8083',
pathRewrite: {
'^/order': ''
}
}));
app.listen(port, () => {
console.log(`Api-gateway started on port: ${port}`);
});
docker-compose.yml
version: '3.2'
services:
#customer
customer:
build: ./customer
ports:
- '8081:8081'
depends_on:
- mongoDB
networks:
- tesodevNet
#order
order:
build: ./order
ports:
- '8083:8083'
depends_on:
- mongoDB
- rabbitMQ
networks:
- tesodevNet
#product
product:
build: ./product
ports:
- '8082:8082'
depends_on:
- mongoDB
- rabbitMQ
networks:
- tesodevNet
#api-gateway
api-gateway:
build: ./api-gateway
ports:
- '8080:8080'
depends_on:
- mongoDB
networks:
- tesodevNet
#mongodb
mongoDB:
image: mongo:latest
restart: always
ports:
- 2720:27017
volumes:
- mongo_db:/data/db
networks:
- tesodevNet
#rabbitmq
rabbitMQ:
image: rabbitmq:3.8-management-alpine
container_name: 'rabbitMQ'
ports:
- 5673:5672
- 15673:15672
volumes:
- ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
- ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
networks:
- tesodevNet
networks:
tesodevNet:
volumes:
mongo_db: {}
I have no problems connecting to the services separately. For example, localhost:8081/create works for the customer service. But when connecting via api-gateway, I get this error when connecting to customer service.