Attempting to connect database from within the microservice, failing to the connect the database
Error: connect ECONNREFUSED 172.18.0.2:3306
service/index.js
var http = require('http');
//create a server object:
http.createServer(function (req, res) {
    res.write('Hello World!'); //write a response to the client
    res.end(); //end the response
}).listen(8080); //the server object listens on port 8080
console.log("Listening at 8080");
var mysql = require('mysql');
var con = mysql.createConnection({
    host: "database",
    user: "root",
    password: "password"
});
con.connect(function(err) {
    if (err) throw err;
    console.log("Database Connected!");
});
docker-compose.yml
version: '3'
services:
  database:
    build:
      ./database
    ports:
      - "6603:3306"
    image: "test-mysql"
    container_name: "test-mysql"
  service:
    build:
      ./service
    ports:
      - "8080:8080"
    depends_on:
      - database
    image: "test-nodejs"
    container_name: "test-nodejs"
    restart: on-failure
I've attempted connecting to database with different settings.
1) Without port
var con = mysql.createConnection({
    host: "database",
    user: "root",
    password: "password"
});
2) specified port 3306
var con = mysql.createConnection({
    host: "database",
    user: "root",
    password: "password"
    port: 3306
});
3) specified port 6603
var con = mysql.createConnection({
    host: "database",
    user: "root",
    password: "password",
    port: 6603
});
database/Dockerfile
FROM mysql
ENV MYSQL_DATABASE=test
ENV MYSQL_ROOT_PASSWORD=password
EXPOSE 6603:3306
COPY ./schema.sql /docker-entrypoint-initdb.d/
Basically how my node.js microservice can discover the database service?
Edit
I suspected that database wasn't ready by the time nodejs kicks in, so I added some delay before connecting to database and error changed
Updated Code
setTimeout(function(){
    var mysql = require('mysql');
    var con = mysql.createConnection({
        host: "database",
        user: "root",
        password: "password"
    });
    con.connect(function(err) {
        if (err) throw err;
        console.log("Database Connected!");
    });
}, 20 * 1000);
output
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
 
     
     
     
    