我有两个 docker 服务,一个运行简单的节点服务器,另一个运行 mysql(实际上是 mariadb)数据库服务器。
/etc/mysql/say 中任何地方提到的套接字文件的所有实例
/var/run/mysqld/mysqld.sock
这很快就会变得很重要。
我的节点服务器正在运行一些尝试连接到 MySQL 服务器的 Sequelize 代码。
每当我尝试通过 Sequelize 连接时,我都会得到:
{"statusCode":500,"error":"Internal Server Error","message":"connect ENOENT /var/run/mysqld/mysqld.sock"}
但是,如果我登录到 Node docker 容器,我可以使用 mysql CLI 客户端成功连接到另一个 docker 容器上的 MySQL。
我想我明白mysql客户端使用tcp连接,而Sequelize使用socket连接。但是,据我所知,当 Sequelize 抛出该错误时,它显示了正确的套接字路径。这是我的 Sequelize 配置:
const options = {
host: "mysql",
dialect: "mysql",
dialectOptions: {
socketPath: "/var/run/mysqld/mysqld.sock"
}
};
let sequelize = new Sequelize("ibbr_dev", "devuser", "password", options);
最佳答案
MySQL 套接字文件在您的 Node 容器中不可用,它仅在 MySQL 容器中可用,因为它是一个文件。您应该使用 TCP 连接(跳过 dialectOptions
),而不是设置基于 unix 套接字的连接。
关于mysql - 无法从 Sequelize.js 连接,可以从 MySQL 客户端连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53455056/