I'm trying to deploy a node Express app to Heroku using docker via a Gihub action ( uses: gonuit/heroku-docker-deploy@v1.3.3) and want to run db-migrate up in the Dockerfile.
It looks like db-migrate can't take into account the config vars (environment variables) provided by Heroku.
Dockerfile:
FROM node:16-alpine3.13
WORKDIR /app
COPY package.json ./
RUN yarn install --production
COPY . .
RUN yarn db-migrate up -e production
CMD ["yarn", "start"]
database.json:
{
"dev": {
"driver": "mysql",
"dialect": "mysql",
"multipleStatements": true,
"host": { "ENV": "DB_HOST" },
"user": { "ENV": "DB_USER" },
"password": { "ENV": "DB_PASSWORD" },
"database": { "ENV": "DB_NAME" },
"port": { "ENV": "DB_PORT" }
},
"production": {
"driver": "mysql",
"dialect": "mysql",
"multipleStatements": true,
"database_url": { "ENV": "CLEARDB_DATABASE_URL" },
"host": { "ENV": "DB_HOST" },
"user": { "ENV": "DB_USER" },
"password": { "ENV": "DB_PASSWORD" },
"database": { "ENV": "DB_NAME" }
},
"sql-file": true
}
Error:
[ERROR] AssertionError [ERR_ASSERTION]: ifError got unwanted exception: connect ECONNREFUSED 127.0.0.1:3306
at module.exports (/app/node_modules/db-migrate/lib/commands/helper/assert.js:9:14)
at /app/node_modules/db-migrate/lib/commands/up.js:19:14
at /app/node_modules/db-migrate/connect.js:17:7
at /app/node_modules/db-migrate/lib/driver/index.js:95:9
at /app/node_modules/db-migrate-mysql/index.js:518:14
at Connection.<anonymous> (/app/node_modules/mysql2/lib/connection.js:775:13)
at Object.onceWrapper (node:events:510:26)
at Connection.emit (node:events:390:28)
at Connection._notifyError (/app/node_modules/mysql2/lib/connection.js:236:12)
at Connection._handleFatalError (/app/node_modules/mysql2/lib/connection.js:167:10)
at Connection._handleNetworkError (/app/node_modules/mysql2/lib/connection.js:180:10)
at Socket.emit (node:events:390:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16)
error Command failed with exit code 1.