I am very new with docker.
My dockerFile:
FROM node:14
RUN mkdir /app
WORKDIR /app
copy package.json .
run npm install
copy . ./
EXPOSE 3000
VOLUME [ "/app/node_modules" ]
CMD ["npm", "start"]
My docker-compose.yml:
version: "3.8"
services: 
  smartdev-app-image:
    build: 
      context: .
      dockerfile: Dockerfile
    ports: 
      - 3000:3000
    volumes: 
      - .:/app
      - '/app/node_modules'
    depends_on: 
      - smartdev__mysqldb_server
  
  smartdev__mysqldb_server:
    image: mysql:8.0
    environment: 
      - MYSQL_DATABASE="smartdev_db"
      - MYSQL_USER="smartdev"
      - MYSQL_PASSWORD="*RUNSman001*"
      - MYSQL_ROOT_PASSWORD="*RUNSman001*"
    ports:
      # <Port exposed> : < MySQL Port running inside container>
      - '3306:3306'
    expose:
      # Opens port 3306 on the container
      - '3306'
My database connection credentials:
const mysql = require('mysql');
const connection = mysql.createConnection({
    host: "smartdev__mysqldb_server",
    user: "mydb_user",
    password: "mydb_password",
    database: "mydb_name",
    port: 3306,
    connectionLimit: 10
});
var del = connection._protocol._delegateError;
connection._protocol._delegateError = function(err, sequence){
  if (err.fatal) {
    console.trace('fatal error: ' + err.message);
  }
  return del.call(this, err, sequence);
};
connection.connect();
when i run:
docker compose up
i get the error:
[nodemon] 2.0.15
smartdev-pro-smartdev-app-image-1        | [nodemon] to restart at any time, enter `rs`
smartdev-pro-smartdev-app-image-1        | [nodemon] watching path(s): *.*
smartdev-pro-smartdev-app-image-1        | [nodemon] watching extensions: js,mjs,json
smartdev-pro-smartdev-app-image-1        | [nodemon] starting `node app.js`
smartdev-pro-smartdev-app-image-1        | The server is now listening on port 3306
smartdev-pro-smartdev-app-image-1        | Trace: fatal error: connect ECONNREFUSED 172.21.0.2:3306
smartdev-pro-smartdev-app-image-1        |     at Protocol.connection._protocol._delegateError (/app/controllers/db/connect.js:15:13)
smartdev-pro-smartdev-app-image-1        |     at Handshake.<anonymous> (/app/node_modules/mysql/lib/protocol/Protocol.js:153:12)
smartdev-pro-smartdev-app-image-1        |     at Handshake.emit (events.js:400:28)
smartdev-pro-smartdev-app-image-1        |     at Handshake.Sequence.end (/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:12)
smartdev-pro-smartdev-app-image-1        |     at Protocol.handleNetworkError (/app/node_modules/mysql/lib/protocol/Protocol.js:369:14)
smartdev-pro-smartdev-app-image-1        |     at Connection._handleNetworkError (/app/node_modules/mysql/lib/Connection.js:418:18)
smartdev-pro-smartdev-app-image-1        |     at Socket.emit (events.js:400:28)
smartdev-pro-smartdev-app-image-1        |     at emitErrorNT (internal/streams/destroy.js:106:8)
smartdev-pro-smartdev-app-image-1        |     at emitErrorCloseNT (internal/streams/destroy.js:74:3)
smartdev-pro-smartdev-app-image-1        |     at processTicksAndRejections (internal/process/task_queues.js:82:21)
smartdev-pro-smartdev-app-image-1        | events.js:377
smartdev-pro-smartdev-app-image-1        |       throw er; // Unhandled 'error' event
smartdev-pro-smartdev-app-image-1        |       ^
smartdev-pro-smartdev-app-image-1        |
smartdev-pro-smartdev-app-image-1        | Error: connect ECONNREFUSED 172.21.0.2:3306
smartdev-pro-smartdev-app-image-1        |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16)
smartdev-pro-smartdev-app-image-1        |     --------------------
smartdev-pro-smartdev-app-image-1        |     at Protocol._enqueue (/app/node_modules/mysql/lib/protocol/Protocol.js:144:48)
smartdev-pro-smartdev-app-image-1        |     at Protocol.handshake (/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
smartdev-pro-smartdev-app-image-1        |     at Connection.connect (/app/node_modules/mysql/lib/Connection.js:116:18)
smartdev-pro-smartdev-app-image-1        |     at Object.<anonymous> (/app/controllers/db/connect.js:20:12)
smartdev-pro-smartdev-app-image-1        |     at Module._compile (internal/modules/cjs/loader.js:1085:14)
smartdev-pro-smartdev-app-image-1        |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
smartdev-pro-smartdev-app-image-1        |     at Module.load (internal/modules/cjs/loader.js:950:32)
smartdev-pro-smartdev-app-image-1        |     at Function.Module._load (internal/modules/cjs/loader.js:790:12)
smartdev-pro-smartdev-app-image-1        |     at Module.require (internal/modules/cjs/loader.js:974:19)
smartdev-pro-smartdev-app-image-1        |     at require (internal/modules/cjs/helpers.js:101:18)
smartdev-pro-smartdev-app-image-1        | Emitted 'error' event on Connection instance at:
smartdev-pro-smartdev-app-image-1        |     at Connection._handleProtocolError (/app/node_modules/mysql/lib/Connection.js:423:8)
smartdev-pro-smartdev-app-image-1        |     at Protocol.emit (events.js:400:28)
smartdev-pro-smartdev-app-image-1        |     at Protocol._delegateError (/app/node_modules/mysql/lib/protocol/Protocol.js:398:10)
smartdev-pro-smartdev-app-image-1        |     at Protocol.connection._protocol._delegateError (/app/controllers/db/connect.js:17:14)
smartdev-pro-smartdev-app-image-1        |     at Handshake.<anonymous> (/app/node_modules/mysql/lib/protocol/Protocol.js:153:12)
smartdev-pro-smartdev-app-image-1        |     at Handshake.emit (events.js:400:28)
smartdev-pro-smartdev-app-image-1        |     at Handshake.Sequence.end (/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:12)
smartdev-pro-smartdev-app-image-1        |     at Protocol.handleNetworkError (/app/node_modules/mysql/lib/protocol/Protocol.js:369:14)
smartdev-pro-smartdev-app-image-1        |     at Connection._handleNetworkError (/app/node_modules/mysql/lib/Connection.js:418:18)
smartdev-pro-smartdev-app-image-1        |     at Socket.emit (events.js:400:28) {
smartdev-pro-smartdev-app-image-1        |   errno: -111,
smartdev-pro-smartdev-app-image-1        |   code: 'ECONNREFUSED',
smartdev-pro-smartdev-app-image-1        |   syscall: 'connect',
smartdev-pro-smartdev-app-image-1        |   address: '172.21.0.2',
smartdev-pro-smartdev-app-image-1        |   port: 3306,
smartdev-pro-smartdev-app-image-1        |   fatal: true
smartdev-pro-smartdev-app-image-1        | }
smartdev-pro-smartdev-app-image-1        | [nodemon] app crashed - waiting for file changes before starting..
One thing that marvels me is where 172.21.0.2:3306 is coming from, i thought the address should have been that of my localhost i.e 127.0.0.1:3306. I've being on this for days, please can someone help point me to what i'm not doing right?
 
    