You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-compose部署MSSQL时setup.sql初始化脚本不生效且登录失败求助

问题原因汇总
  • 通配符被引号包裹失效:你写的/scripts/"*.sql"把通配符*用引号包裹后,bash不会解析通配符匹配真实文件,只会把"*.sql"当做一个不存在的文件名
  • 初始化脚本根本没有执行:你的for循环里只打印了文件名,没有调用sqlcmd执行对应的SQL脚本,所以system用户和probna库根本没有创建,自然登录失败
  • 变量未转义:compose文件中$foo没有加第二个$转义,docker-compose会尝试解析宿主环境的foo变量,找不到就抛出变量未设置的告警
  • 末尾等待进程的变量名写错:最后一行的wait $$pi是笔误,应该是wait $$pid,否则会抛出找不到pid的错误
修正后的可用方案

1. 调整本地文件结构

在你想要存放配置的目录下创建如下结构:

your_project/
├─ docker-compose.yml
└─ init/
   └─ setup.sql

把你现有的setup.sql放到init目录下即可。

2. 修改docker-compose.yml内容

version: "3.7"
services:
  sql-server-db:
    container_name: sql-server-db
    image: mcr.microsoft.com/mssql/server:2019-latest
    ports:
      - "1433:1433"
    environment:
      SA_PASSWORD: "secret123new!"
      ACCEPT_EULA: "Y"
      MSSQL_PID: "Express"
    volumes:
      # 持久化数据库数据,避免容器重启数据丢失
      - ./mssql_data:/var/opt/mssql
      # 挂载初始化脚本目录
      - ./init:/scripts
    command:
      - /bin/bash
      - -c
      - |
        # 启动SQL Server后台运行
        /opt/mssql/bin/sqlservr &
        pid=$$!
        # 等待SQL Server启动完成
        echo "等待MSSQL启动..."
        until /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "secret123new!" -Q "SELECT 1" > /dev/null 2>&1
        do
          sleep 5
          echo "重试连接中..."
        done
        # 仅第一次启动执行初始化脚本,避免重复执行报错
        if [ ! -f /var/opt/mssql/init_done ]; then
          echo "开始执行初始化SQL脚本"
          for sql_file in /scripts/*.sql
          do
            echo "执行脚本:$$sql_file"
            /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "secret123new!" -i "$$sql_file"
          done
          # 创建初始化完成标记
          touch /var/opt/mssql/init_done
          echo "所有初始化脚本执行完成"
        fi
        # 等待SQL Server主进程运行
        wait $$pid

3. Windows下启动步骤

无需安装node.js,直接按以下操作:

  • 打开PowerShell,cd到你的your_project目录
  • 执行命令:docker-compose up -d
  • 等待1-2分钟让初始化完成,再用DBeaver连接
  • 连接配置:主机填localhost,端口1433,用户名system,密码system,默认数据库选probna即可
验证方法

如果不确定是否初始化成功,可以执行docker logs sql-server-db查看日志,能看到「所有初始化脚本执行完成」的提示就说明配置正常。

内容的提问来源于stack exchange,提问作者patplo1999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 01:24:00