1

I am running node and mysql containers with docker compose and try to connect typeorm with mysql container but I got the same error over and over

this is my docker-compose.yml

version: '3.8'
services:
  db:
    image: mysql
    restart: always
    ports:
      - '3306:3306'
    volumes:
      - ~/apps/mysql:/var/lib/mysql
    environment:
      MYSQL_HOST: "mysql"
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: test
  app:
    build: .
    command: npm start
    volumes:
      - .:/usr/app/
    ports:
      - '8000:8000'
    depends_on:
      - db

and this is typeorm config file

import {DataSource} from 'typeorm';
import * as dotenv from 'dotenv';

dotenv.config();

export const appDataSource = new DataSource({
    type: 'mysql',
    host: process.env.DB_HOST,
    port: 3306,
    database: process.env.DB_NAME,
    entities:[
        'src/entities/*.js'
    ],
    synchronize: true,
    logging: true
});

and this is my .env file

BD_USER = root
DB_PASSWORD = password 
DB_NAME = test
DB_HOST = mysql

and finally my app.ts file

import * as express from 'express';
import * as cors from 'cors' ;
import { appDataSource } from '../ormconfig';

const app = express();
app.use(cors({
    origin: ['http://localhost:3000', 'http://localhost:8080', 'http://localhost:4200']
}));

app.use(express.json());

appDataSource.initialize().then(()=> console.log('connected to database')).catch(err => console.log(err));

app.listen(8000, () => {
    console.log('listening on port 8000')
})

the full error

admin-app-1  | Error: getaddrinfo EAI_AGAIN mysql
admin-app-1  |     at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
admin-app-1  |     --------------------
admin-app-1  |     at Protocol._enqueue (/usr/app/node_modules/mysql/lib/protocol/Protocol.js:144:48)
admin-app-1  |     at Protocol.handshake (/usr/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
admin-app-1  |     at PoolConnection.connect (/usr/app/node_modules/mysql/lib/Connection.js:116:18)
admin-app-1  |     at Pool.getConnection (/usr/app/node_modules/mysql/lib/Pool.js:48:16)
admin-app-1  |     at /usr/app/node_modules/typeorm/driver/mysql/MysqlDriver.js:991:18
admin-app-1  |     at new Promise (<anonymous>)
admin-app-1  |     at MysqlDriver.createPool (/usr/app/node_modules/typeorm/driver/mysql/MysqlDriver.js:988:16)
admin-app-1  |     at MysqlDriver.connect (/usr/app/node_modules/typeorm/driver/mysql/MysqlDriver.js:299:36)
admin-app-1  |     at DataSource.initialize (/usr/app/node_modules/typeorm/data-source/DataSource.js:122:27)
admin-app-1  |     at Object.<anonymous> (/usr/app/src/app.js:11:27) {
admin-app-1  |   errno: -3001,
admin-app-1  |   code: 'EAI_AGAIN',
admin-app-1  |   syscall: 'getaddrinfo',
admin-app-1  |   hostname: 'mysql',
admin-app-1  |   fatal: true

I tried different solutions in structuring mysql part in docker-compose file based on some online articles but i got the same error

  • You've named your database container `db` (the name of the block underneath `services:`) and you should use that host name in your configuration. – David Maze Oct 15 '22 at 21:12

1 Answers1

0

change DB_HOST in .env to db (database container name)