我有两个docker服务,一个运行一个简单的节点服务器,另一个运行mysql(实际上是mariadb)数据库服务器。
在/ etc / mysql /中任何地方提到的套接字文件的所有实例都说
/var/run/mysqld/mysqld.sock
这很快很重要。
我的节点服务器正在运行一些Sequelize代码,试图连接到MySQL服务器。
每当我尝试通过Sequelize进行连接时,我都会得到:
{"statusCode":500,"error":"Internal Server Error","message":"connect ENOENT /var/run/mysqld/mysqld.sock"}
但是,如果我登录到Node docker容器,则可以使用mysql CLI客户端成功连接到另一个docker容器上的MySQL。
我想我了解mysql客户端正在使用tcp连接,而Sequelize正在使用套接字连接。但是,据我所知,当Sequelize抛出该错误时,它显示的是 correct 套接字路径。这是我的Sequelize配置:
const options = {
host: "mysql",
dialect: "mysql",
dialectOptions: {
socketPath: "/var/run/mysqld/mysqld.sock"
}
};
let sequelize = new Sequelize("ibbr_dev", "devuser", "password", options);
答案 0 :(得分:1)
MySQL套接字文件在您的Node容器中不可用,它仅在MySQL容器中可用,因为它是一个文件。而不是建立基于unix套接字的连接,您应该使用TCP连接(跳过dialectOptions
)。