Sql server 使用Sequelize连接到docker容器内的SQL Server数据库时遇到困难

Sql server 使用Sequelize连接到docker容器内的SQL Server数据库时遇到困难,sql-server,docker,sequelize.js,feathersjs,feathers-sequelize,Sql Server,Docker,Sequelize.js,Feathersjs,Feathers Sequelize,我有一个名为microsoft/mssql Server linux的SQL Server Docker映像,用于启动SQL Server数据库。我有一个在Docker外部制作的API,我试图构造一个连接字符串以连接到此数据库,但未成功 我已使用Azure Data Studio通过以下连接设置成功连接到此数据库 Connection Type: Microsoft SQL Server Server: localhost Username: (username I created) Passw

我有一个名为microsoft/mssql Server linux的SQL Server Docker映像,用于启动SQL Server数据库。我有一个在Docker外部制作的API,我试图构造一个连接字符串以连接到此数据库,但未成功

我已使用Azure Data Studio通过以下连接设置成功连接到此数据库

Connection Type: Microsoft SQL Server
Server: localhost
Username: (username I created)
Password: (password I created)
我使用Feathersjs创建了一个API项目,并使用sequelize作为ORM。下面是我如何尝试创建连接的

  const sequelize = new Sequelize(database, username, password, {
    dialect: "mssql",
    host: localhost,
    encrypt: false,
    logging: false,
    operatorsAliases: false,
    define: {
      freezeTableName: true
    },
    dialectOptions: {
      port: 1433
      // instanceName: "NameOfTheMSSQLInstance"
    }
  });
我使用端口1433是因为当我在终端中运行“docker ps”时,它在端口下列出了这些信息

 0.0.0.0:1433->1433/tcp
我知道用户名/密码是正确的,因为我正在通过Azure Data Studio成功连接,并在docker中更改了几次,以确保这不是凭据问题

尝试连接时,我收到以下错误消息

错误:在以下位置未处理的拒绝:Promise{“{u bitField”:18087936,“\u fulfillmentHandler0:{”name:“SequelizeConnectionError”,“parent:{”message:“未能在15000ms内连接到172.17.0.2:1433”,“code:“ETIMEOUT”},“original:{”message:“未能在15000ms内连接到172.17.0.2:1433”,“code:“ETIMEOUT”},“name:“SequelizeConnectionError”,“parent:”{“消息”:“未能在15000ms内连接到172.17.0.2:1433”,“代码”:“ETIMEOUT”},“原始”:{“消息”:“未能在15000ms内连接到172.17.0.2:1433”,“代码”:“ETIMEOUT”}” 错误:GeneralError:无法在15000ms内连接到172.17.0.2:1433


您的docker数据库容器准备好接受连接了吗?当您将docker与sequelize一起使用时,数据库和应用程序容器会同时启动,因此您需要等待数据库容器准备好接受连接,以便将sequelize与您的数据库连接起来。此外,请确保您正确链接了这两个容器。如果您是唱docker compose,检查文档以链接容器,或者你可以使用网络。

晚会迟到了,但我用你的问题来解决我的错误,现在它可以工作了,所以我想我应该与大家分享

我在Docker上本地运行MSSQL DB时使用了:

docker run --name sql_server_demo -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=1Secure*Password1' -e 'MSSQL_PID=Developer' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest
为了通过sequelize连接到它,我创建了一个“环境”,如下所示:

"mssql": {
   "username": "sa",
   "password": "1Secure*Password1",
   "database": "master",
   "host": "127.0.0.1",
   "dialect": "mssql"
}
这使我能够运行迁移,因为.sequelizerc文件使用了相同的环境:

// .sequelizerc

const path = require('path');

module.exports = {
    'env': 'mssql',
    'config': path.resolve('src/config/env', 'sequelize_db.json'),
    'models-path': path.resolve('src', 'models'),
    'seeders-path': path.resolve('src', 'seeders'),
    'migrations-path': path.resolve('src', 'migrations')
};
然后在运行时,我按照如下方式配置了sequelize(注意,我在我的Nodejs服务器中使用了一个配置设置,只从sequelize环境文件中提取变量,但我在这里替换了它们):

请记住,我是MSSQL新手,这可能不是最好的方法,但我很高兴我终于让它工作了


干杯!

遇到“困难”时“发布您收到的错误消息将有助于让其他人了解问题所在。公平点。谢谢问题是连接超时了。这是一个很好的起点。似乎很多其他人已经解决了这个问题。请使用运行SQL容器的服务器的IP端口1433,而不是本地主机。
this.sequelize = new Sequelize('master',  'sa', '1Secure*Password1', {
      host: '127.0.0.1',
      dialect: 'mssql',
      encrypt: false,
      define: {
            freezeTableName: true
      },
      dialectOptions: {
             port: 1433
      }
});