NodeJS和Mysql与docker一起组成3个

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

我正在尝试构建一个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/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主机