В приведенном ниже коде я запускаю mysql Docker с помощью testcontainers , подключаюсь к новой базе данных и заполняю базу данных из каталога SQL. Однако каждый раз, когда я запускаю эту функцию, я получаю сообщение о том, что сервер закрыл соединение. Что я делаю неправильно?
// Spin up a MySQL docker and populate it according to the files in the sql directory
import fs from 'fs'
import path from 'path'
import { createPool } from 'mysql2/promise'
import { GenericContainer, Wait } from 'testcontainers'
const sqlDir = `${__dirname}/../sql`
export const mysqlContainer = async () => {
const container = await new GenericContainer('mysql', '5.7')
.withExposedPorts(3306)
.withEnv('MYSQL_ALLOW_EMPTY_PASSWORD', '1')
.withEnv('MYSQL_DATABASE', 'testdb')
.withWaitStrategy(Wait.forLogMessage('mysqld: ready for connections.'))
.start()
console.log('Container started')
return container
}
export const setupDatabases = async (container) => {
const connection = await createPool({ host: 'localhost', user: 'root', password: '', port: container.getMappedPort(3306) })
console.log('Connected to database')
const dir = await fs.promises.opendir(sqlDir)
for await (const dirent of dir) {
console.log(dirent.name)
if (dirent.name.match(/\.sql$/)) {
const fileContents = await fs.promises.readFile(path.join(sqlDir, dirent.name))
await connection.query(fileContents.toString())
console.log(`process SQL file ${dirent.name}`)
}
}
}