首页 > 解决方案 > 如何从 Node 容器访问外部数据库?

问题描述

我有一个nextjs应用程序应该连接到外部 MySQL 数据库(不是来自同一个 docker 网络的)。在本地运行应用程序时,它在连接到 DB 时可以正常工作,但是在 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 }
  }
}

有任何想法吗?

标签: mysqlnode.jsdockernext.js

解决方案


推荐阅读