NodeJS和Mysql与docker一起组成3个
我正在尝试构建一个docker compose文件,以便在本地部署连接到mysql服务器的NodeJS应用程序。我已经尝试了所有的方法(在Stackoverflow中阅读了很多教程和一些问题),但是我不断地发现错误。这是我的MySql Dockerfile:NodeJS和Mysql与docker一起组成3个,mysql,node.js,docker,docker-compose,Mysql,Node.js,Docker,Docker Compose,我正在尝试构建一个docker compose文件,以便在本地部署连接到mysql服务器的NodeJS应用程序。我已经尝试了所有的方法(在Stackoverflow中阅读了很多教程和一些问题),但是我不断地发现错误。这是我的MySql Dockerfile: FROM mysql:latest EXPOSE 3307 COPY ./sql-scripts /docker-entrypoint-initdb.d/ 还有NodeJS FROM node:10 WORKDIR /user/sr
FROM mysql:latest
EXPOSE 3307
COPY ./sql-scripts /docker-entrypoint-initdb.d/
还有NodeJS
FROM node:10
WORKDIR /user/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["npm", "start"]
这是我的docker文件
version: "3"
services:
db:
build: ./db
environment:
MYSQL_DATABASE: sls_db
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: root
MYSQL_PASSWORD:
DATABASE_HOST: db
restart: always
ports:
- "3307:3306"
node:
build: .
environment:
MYSQL_DATABASE: sls_db
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: root
MYSQL_PASSWORD:
DATABASE_HOST: db
ports:
- "3001:3000"
depends_on:
- db
restart: on-failure
这是我在NodeJS应用程序中的db配置文件
const mysql = require("mysql");
const logger = require("./../config/logger");
// DB Config
const config = {
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
};
// MySql connection pool
const pool = mysql.createPool(config);
pool.getConnection((err, connection) => {
if (err) logger.error(err);
if (connection) connection.release();
return;
});
module.exports = pool;
你能帮我吗?谢谢初始化后,数据库容器日志显示了什么?我怀疑它不知怎的失败了
MYSQL\u USER:root
看起来可疑,因为此用户默认由MYSQL容器基于官方图像创建。还要确保init脚本的播放正确。无论如何,你的问题是缺少调试细节,没有人能有效地帮助你。另一件让我吃惊的事情是,你的代码正在寻找MYSQL\u主机
,但是你的Compose设置配置了数据库\u主机
。您得到的实际完整错误是什么?看起来您的应用程序代码没有使用3307端口。因为这不是默认端口,所以它可能应该是。@danblack 3307是主机上的端口,而不是Docker网络,EXPOSE不会更改服务器端口类型吗process.env.MYSQL\u主机
需要是process.env.DATABASE\u主机
初始化后,您的数据库容器日志会说什么?我怀疑它不知怎的失败了MYSQL\u USER:root
看起来可疑,因为此用户默认由MYSQL容器基于官方图像创建。还要确保init脚本的播放正确。无论如何,你的问题是缺少调试细节,没有人能有效地帮助你。另一件让我吃惊的事情是,你的代码正在寻找MYSQL\u主机
,但是你的Compose设置配置了数据库\u主机
。您得到的实际完整错误是什么?看起来您的应用程序代码没有使用3307端口。因为这不是默认端口,所以它可能应该是。@danblack 3307是主机上的端口,而不是Docker网络,EXPOSE不会更改服务器端口类型吗process.env.MYSQL\u主机
需要是process.env.DATABASE\u主机