mysql - 如何从 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 }
}
}
有任何想法吗?
解决方案
推荐阅读
- arangodb - 限制组中的结果数 (AQL)
- python - 从python中的文件中获取特定行的内容
- ruby-on-rails - Bundler 找不到 gem“activesupport”的兼容版本:当我尝试更新 cocoapods 版本时
- android - java.lang.NoClassDefFoundError: xxx.xxx.xxx.Xxx$Xxx(仅限 Dalvik)
- tensorflow - VGG16的conv3、conv4、conv5输出是什么?
- android - 如何使用 Unity Mobile Notification 包检查用户是否通过通知进入应用程序?
- android - 如何在 Android Studio UI 设计器中添加 AndroidX 组件?
- apache-spark - 如何使用 Spark 将输出写入现有 HDFS 目录下的单独文件?
- c# - Orchard Core CMS FETCH 语句中选项 NEXT 的使用无效
- javascript - 如何从 WooCommerce 获取产品价格,以便可以将其与 javascript 一起使用?