最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 13浏览 0评论

如何从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网络的一个)。在本地运行应用程序时,它在连接到数据库时可以正常工作,但是在...

回答如下:

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

如何从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. 暂无评论