本Docker镜像基于mcr.microsoft.com/mssql-tools:latest构建,整合了Microsoft SQL Server命令行工具与PowerShell 7+,提供统一的容器环境用于执行SQL操作和PowerShell脚本,简化数据库相关任务的自动化与部署流程。
该镜像包含以下核心组件:
powershelldocker pull cilerler/microsoft-mssql-tools:latest
powershelldocker run -it --rm cilerler/microsoft-mssql-tools:latest pwsh
进入容器后,可直接使用sqlcmd:
powershellsqlcmd -S your-server.database.windows.net -U your-username -P your-password -d your-database -Q "SELECT @@VERSION"
powershelldocker run --rm cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -S 'your-server' -U 'your-username' -P 'your-password' -d 'your-database' -Q 'SELECT GETDATE()'"
首先挂载包含SQL脚本的本地目录:
powershelldocker run --rm -v ${PWD}:/scripts cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -S 'your-server' -U 'your-username' -P 'your-password' -d 'your-database' -i /scripts/your-script.sql"
powershelldocker run --rm ` -e SQL_SERVER='your-server' ` -e SQL_USER='your-username' ` -e SQL_PASSWORD='your-password' ` -e SQL_DATABASE='your-database' ` cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -S `$env:SQL_SERVER -U `$env:SQL_USER -P `$env:SQL_PASSWORD -d `$env:SQL_DATABASE -Q 'SELECT DB_NAME()'"
创建PowerShell脚本(db-operations.ps1):
powershell# db-operations.ps1 $server = $env:SQL_SERVER $user = $env:SQL_USER $password = $env:SQL_PASSWORD $database = $env:SQL_DATABASE Write-Host "连接到 $server..." $result = sqlcmd -S $server -U $user -P $password -d $database -Q "SELECT COUNT(*) FROM sys.tables" -h -1 Write-Host "表数量: $result"
运行脚本:
powershelldocker run --rm ` -v ${PWD}:/scripts ` -e SQL_SERVER='your-server' ` -e SQL_USER='your-username' ` -e SQL_PASSWORD='your-password' ` -e SQL_DATABASE='your-database' ` cilerler/microsoft-mssql-tools:latest pwsh /scripts/db-operations.ps1
导出数据到文件:
powershelldocker run --rm -v ${PWD}:/data cilerler/microsoft-mssql-tools:latest pwsh -Command ` "bcp 'SELECT * FROM YourTable' queryout /data/output.dat -S 'your-server' -U 'your-username' -P 'your-password' -d 'your-database' -c"
从文件导入数据:
powershelldocker run --rm -v ${PWD}:/data cilerler/microsoft-mssql-tools:latest pwsh -Command ` "bcp YourTable in /data/input.dat -S 'your-server' -U 'your-username' -P 'your-password' -d 'your-database' -c"
若在Windows主机上运行本地SQL Server,从容器连接方法:
powershell# 使用host.docker.internal引用Windows主机 docker run --rm cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -S 'host.docker.internal' -U 'sa' -P 'YourPassword' -Q 'SELECT @@SERVERNAME'"
若SQL Server运行在Docker容器中:
powershell# 创建网络 docker network create sql-network # 运行SQL Server(示例) docker run -d --name sqlserver --network sql-network ` -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrong@Password" ` mcr.microsoft.com/mssql/server:2022-latest # 在同一网络中运行mssql-tools容器 docker run --rm --network sql-network cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -S 'sqlserver' -U 'sa' -P 'YourStrong@Password' -Q 'SELECT @@VERSION'"
创建docker-compose.yml:
yamlversion: '3.8' services: sqlserver: image: mcr.microsoft.com/mssql/server:2022-latest environment: ACCEPT_EULA: "Y" SA_PASSWORD: "YourStrong@Password" ports: - "1433:1433" sql-tools: image: cilerler/microsoft-mssql-tools:latest depends_on: - sqlserver environment: SQL_SERVER: sqlserver SQL_USER: sa SQL_PASSWORD: "YourStrong@Password" SQL_DATABASE: master volumes: - ./scripts:/scripts command: pwsh -Command "Start-Sleep -Seconds 10; sqlcmd -S $$env:SQL_SERVER -U $$env:SQL_USER -P $$env:SQL_PASSWORD -i /scripts/init.sql"
运行:
powershelldocker-compose up
yamlsteps: - task: Docker@2 displayName: '运行数据库迁移' inputs: command: 'run' arguments: > --rm -v $(Build.SourcesDirectory)/database:/scripts -e SQL_SERVER=$(SqlServer) -e SQL_USER=$(SqlUser) -e SQL_PASSWORD=$(SqlPassword) -e SQL_DATABASE=$(SqlDatabase) cilerler/microsoft-mssql-tools:latest pwsh /scripts/migrate.ps1
yaml- name: 运行数据库脚本 run: | docker run --rm ` -v ${{ github.workspace }}/database:/scripts ` -e SQL_SERVER=${{ secrets.SQL_SERVER }} ` -e SQL_USER=${{ secrets.SQL_USER }} ` -e SQL_PASSWORD=${{ secrets.SQL_PASSWORD }} ` -e SQL_DATABASE=${{ secrets.SQL_DATABASE }} ` cilerler/microsoft-mssql-tools:latest ` pwsh /scripts/deploy.ps1 shell: pwsh
可在运行时安装SqlServer模块:
powershelldocker run -it --rm cilerler/microsoft-mssql-tools:latest pwsh -Command ` "Install-Module -Name SqlServer -Force -AllowClobber; Import-Module SqlServer; Invoke-Sqlcmd -ServerInstance 'your-server' -Username 'your-username' -Password 'your-password' -Query 'SELECT @@VERSION'"
powershell# check-database.ps1 $ErrorActionPreference = "Stop" try { $result = sqlcmd -S $env:SQL_SERVER -U $env:SQL_USER -P $env:SQL_PASSWORD -Q "SELECT 1" -h -1 if ($LASTEXITCODE -eq 0) { Write-Host "连接成功!" exit 0 } else { Write-Error "连接失败,退出码: $LASTEXITCODE" exit 1 } } catch { Write-Error "错误: $_" exit 1 }
-S - 服务器名称或IP地址-U - 用户名(SQL Server身份验证)-P - 密码(SQL Server身份验证)-E - 使用Windows身份验证(Linux容器中不适用)-d - 数据库名称-Q - 执行查询后退出-i - 输入文件(SQL脚本)-o - 输出文件-h -1 - 移除输出中的标题-s - 列分隔符-W - 移除尾随空格-C - 信任服务器证书(用于加密连接)切勿在脚本或命令历史中硬编码密码,应使用环境变量或安全的密钥管理:
powershell# 从环境变量读取 $password = $env:SQL_PASSWORD # 或在Swarm模式中使用Docker Secrets docker run --rm ` --secret sql-password ` cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -S 'your-server' -U 'your-username' -P (Get-Content /run/secrets/sql-password) -Q 'SELECT 1'"
若连接失败,验证连接字符串:
powershelldocker run --rm cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -S 'your-server' -U 'your-username' -P 'your-password' -Q 'SELECT 1' -C"
使用-C参数信任服务器证书(适用于加密连接)。
powershelldocker run --rm cilerler/microsoft-mssql-tools:latest pwsh -Command ` "sqlcmd -?; Write-Host '---'; pwsh --version"
如需本地构建该镜像:
powershell# 克隆或创建Dockerfile后执行 docker build -t cilerler/microsoft-mssql-tools:latest .
本镜像基于Microsoft***SQL Server工具镜像构建。有关sqlcmd和bcp实用工具的许可条款,请参阅Microsoft的许可条款。
欢迎提交issue和拉取请求以改进此镜像和文档。

来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429