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