Как получить доступ к внешней базе данных из контейнера Node? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть приложение nextjs, которое должно подключаться к внешней базе данных MySQL (а не к той же сети docker). При локальном запуске приложения оно работает правильно при подключении к БД, но при запуске его в контейнере Docker оно продолжает пытаться подключиться к 127.0.0.1, даже если переменные среды настроены правильно в контейнере

Error: Error: connect ECONNREFUSED 127.0.0.1:3306
nextjs_1  |     at connect (/opt/app/node_modules/serverless-mysql/index.js:80:15)

Конфигурация Dockerfile:

FROM node:alpine

RUN mkdir -p /opt/app
RUN apk add --no-cache libc6-compat
ENV NODE_ENV production
ENV PORT 3000
EXPOSE 3000

WORKDIR /opt/app

COPY package.json /opt/app
COPY package-lock.json /opt/app

RUN npm install --no-optional

COPY . /opt/app

RUN npm run build

RUN npx next telemetry disable

RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

USER nextjs

CMD [ "npm", "start" ]

Код подключения:

const mysql = require('serverless-mysql')

const db = mysql({
  config: {
    host: process.env.MYSQL_HOST,
    database: process.env.MYSQL_DATABASE,
    user: process.env.MYSQL_USER,
    password: process.env.MYSQL_PASSWORD,
  },
})

exports.query = async (query) => {
  try {
    const results = await db.query(query)
    await db.end()
    return results
  } catch (error) {
    return { error }
  }
}

Есть идеи?

...