
cilerler/microsoft-mssql-tools本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和拉取请求以改进此镜像和文档。



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务