最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何从Node容器访问外部数据库?

网站源码admin21浏览0评论

如何从Node容器访问外部数据库?

如何从Node容器访问外部数据库?

我有一个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 }
  }
}

有什么想法吗?

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

回答如下:

发现了问题。由于某些原因,它与在容器中使用特定用户有关,特别是这一部分:

发布评论

评论列表(0)

  1. 暂无评论