我正在通过 docker 组合启动两个 docker 集装箱.

docker-compose.yml个文件的内容:

version: "3.7"

services:
  app:
    image:  my-app:latest
    ports:  
      - 8000:8000
    working_dir: /usr/app/MyApp
    environment: 
      MYSQL_ROOT_PASSWORD: myawesomepassword
      MYSQL_DATABASE: myawesomedb
      MYSQL_USER: root
      MYSQL_PASSWORD: myawesomepassword
  mysql:
    image:  mysql:5.6
    volumes:
      - db-data:/var/lib/mysql 
    environment: 
      MYSQL_ROOT_PASSWORD: myawesomepassword
      MYSQL_DATABASE: myawesomedb
volumes:
  db-data: {}

该应用程序连接到数据库的方式如下:

import mysql from 'mysql2/promise.js';

var config = {
    app: {
        host: 'http://localhost',
        port: '8000'
    },
    database: {
        host: 'host.docker.internal',
        port: 3306,
        database: process.env['MYSQL_DATABASE'],
        user: process.env['MYSQL_USER'],
        password: process.env['MYSQL_PASSWORD']
    }
}

const {host, port, user, password, database } = config.database;

// Error occurs here
const connection = await mysql.createConnection({ host, port, user, password });

当应用程序服务try 连接到MySQL时,我收到以下错误:

Error: Access denied for user 'root'@'localhost' (using password: YES)

欢迎任何建议.提前感谢你了

推荐答案

该错误通常意味着您将应用程序服务指向localhost,这意味着应用程序容器本身.在您的情况下,您将指向主机. 您需要在配置中更新数据库的地址以指向另一个容器.

由于您使用mysql作为数据库服务名称,因此只需将您的代码更新为:

database: {
    host: 'mysql',
    port: 3306,
    ...
}

Mysql相关问答推荐

带负数的MySQL子字符串_索引

如何从MySQL数据库中提取入职第一个月的工作天数?

Mysql - Select 匹配某些条件的两条记录之间经过的最大天数

如何在 MySQL Workbench 中设置 DateTime 列的默认值?

如何在 mysql 中获取 Day Wise 的平均值?

如何将结果列中的不同值按其他列sql中的值带入单行

在 SQL 中 for each 组返回具有最大值的行,包括具有相同值的行

使用 DISTINCT 时无法从数据库中查询所有数据

为什么这个 NOT NULL 到 NULL 迁移会触发大量 I/O 操作?

mysql 执行注释部分

SQL从具有相同列的行中 Select 最后一行

MySQL 每组最大 n 只适用于多行

如何在考虑另一表的值的情况下计算一列的值

使用 MySQL LIMIT、OFFSET 进行分页

字符ي和ی以及波斯语的区别 - Mysql

何时在 mysql 中使用 TEXT 而不是 VARCHAR

在mysql中增量更新值

Doctrine2 迁移向下迁移并从浏览器而不是命令行迁移

第 1 行的 CSV 输入中的列数无效错误

将 UTF8 表上的 latin1 字符转换为 UTF8