Docker 部署 Microsoft SQL Server 完全指南

 更新时间:2025年08月23日 15:09:46   作者:FC_nian  
本文详细介绍如何使用Docker快速部署Microsoft SQL Server,提供两种主流方式,两种方式都包含了数据持久化、资源限制等生产环境所需的配置,并提供了详细的参数说明和常见问题解决方法,感兴趣的朋友跟随小编一起看看吧

部署方案对比

特性Docker 命令行方式Docker Compose 方式
适用场景快速测试、简单部署、临时使用正式部署、复杂应用、多环境配置、需要版本控制
配置管理单行命令,难以复用声明式 YAML 文件,易于管理和版本控制
持久化需手动指定主机绝对路径支持命名卷和相对路径,管理更方便
安全性密码在命令历史中可见可通过 .env 文件隔离敏感信息
管理复杂度简单需要编写 YAML 文件
扩展性较差极佳,可轻松定义多服务应用

一、Docker 命令行方式

这种方式直接使用 docker run 命令,适合快速测试和简单部署

1. 拉取官方镜像

从 Microsoft Container Registry 拉取 SQL Server 2022 的最新 Linux 镜像

docker pull mcr.microsoft.com/mssql/server:2022-latest

  • 注意:如需其他版本(如 2019),将标签改为 :2019-latest

2. 创建本地数据目录(用于持久化)

为了避免容器删除后数据丢失,需要在宿主机上创建一个目录来映射容器内的数据存储位置

mkdir -p /usr/local/docker/sqlserver/data

3. 运行容器命令(最关键的步骤)

docker run -d \
    --name sql-server \
    -e "ACCEPT_EULA=Y" \
    -e "MSSQL_SA_PASSWORD=sqlserver@7740" \
    -e "MSSQL_PID=Developer" \
    -p 1433:1433 \
    -v /usr/local/docker/sqlserver/data:/var/opt/mssql \
    --memory="4g" \
    --restart unless-stopped \
    --user root \
    mcr.microsoft.com/mssql/server:2019-latest

3.1 参数说明表

参数说明必要性
-d后台运行容器(守护模式)可选
--name sql-server指定容器名称可选
-e "ACCEPT_EULA=Y"接受最终用户许可协议必须
-e "MSSQL_SA_PASSWORD=..."设置sa用户密码(需符合复杂度要求)必须
-e "MSSQL_PID=Developer"指定版本(Developer/Express/Standard/Enterprise)可选
-p 1433:1433端口映射(主机端口:容器端口)必须
-v /host/path:/var/opt/mssql数据持久化挂载(主机路径:容器路径)推荐
--memory="4g"限制容器最大内存使用推荐
--restart unless-stopped设置自动重启策略(除非手动停止)推荐

3.2 密码复杂度要求

  • 长度至少8个字符
  • 包含以下字符类型中的至少三种:
    • 大写字母(A-Z)
    • 小写字母(a-z)
    • 数字(0-9)
    • 特殊符号(如!@#$%^&*)

4. 检查容器状态

运行后,使用以下命令查看容器是否成功启动:

docker ps

  • 如果状态(STATUS)显示为 Up ...,则表示运行成功。如果显示为 Exited,说明启动失败,需要查看日志

5. 查看日志以排查问题

错误示例

docker logs sql-server
  • 常见启动失败原因:
    1. 密码不符合复杂性要求
    2. 没有设置 ACCEPT_EULA=Y
    3. 宿主机端口已被占用(更改 -p 参数即可)
    4. 配置的挂载目录没有访问权限
      sudo chmod -R 777 /usr/local/docker/sqlserver/data

6. 连接测试

容器运行后,你可以使用任何客户端工具连接

  • 服务器: ip
  • 身份验证: SQL Server 身份验证
  • 登录名: sa
  • 密码: 你在 MSSQL_SA_PASSWORD 中设置的密码
  • 端口: 如果你映射的是 1433,直接使用即可

常用管理命令:

*  停止容器: docker stop sql-server
*  启动容器: docker start sql-server
*  重启容器: docker restart sql-server
*  进入容器内部bash: docker exec -it sql-server bash
*  删除容器 (⚠️ **会丢失未持久化的数据**): docker rm -f sql-server

二、Docker Compose 方式

这种方式使用一个 docker-compose.yml 文件来声明所有配置,更清晰、易于版本控制和复用,特别适合复杂应用和多环境部署

1. 创建项目目录和文件

cd /usr/local
sudo mkdir -p /docker/sql-server && cd /docker/sql-server
mkdir data && sudo chmod -R 777 data

2. 创建 docker-compose.yml 文件

需要提前创建docker网络:docker network create fc
使用文本编辑器创建该文件,并填入以下内容:

services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2019-latest
    container_name: sqlserver
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_PID=Developer
      - MSSQL_SA_PASSWORD=sqlserver@7740
    ports:
      - "1433:1433"
    volumes:
      - mssql_data:/var/opt/mssql  # 使用命名卷
    restart: unless-stopped
    mem_limit: 4g
    mem_reservation: 2g
    cpus: 2.0
    networks:
      - fc
volumes:
  mssql_data:  # 定义命名卷
networks:
  fc:
    external: true

配置项说明表

配置项说明示例值
image使用的Docker镜像mcr.microsoft.com/mssql/server:2022-latest
environment环境变量配置ACCEPT_EULA=Y, MSSQL_SA_PASSWORD=...
ports端口映射配置"1433:1433"
volumes数据卷映射mssql_data:/var/opt/mssql
mem_limit内存限制4g
networks网络配置自定义桥接网络

(可选)创建 .env 文件管理敏感信息
为了避免将密码硬编码在 YAML 文件中,可以创建一个 .env 文件(与 docker-compose.yml 同目录):

# .env file
MSSQL_SA_PASSWORD=sqlserver@7740

然后修改 docker-compose.yml 中的 MSSQL_SA_PASSWORD 一行:

- MSSQL_SA_PASSWORD=${MSSQL_SA_PASSWORD}

或者

env_file:
  - .env  # 将密码移出docker-compose文件

Docker Compose 会自动读取同目录下的 .env 文件并注入变量

3. 启动容器

启动容器前,注意开放防火墙端口:

# 如果使用 firewalld
sudo firewall-cmd --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

然后在包含 docker-compose.yml 文件的目录下,执行:

docker compose up -d

  • -d 同样表示在后台运行
  • 这个命令会自动拉取镜像(如果本地没有)、创建定义的卷、网络,并启动所有服务

总结

特性Docker 命令行方式Docker Compose 方式
适用场景快速测试、单次运行、简单任务正式部署、复杂应用、多环境、需要版本控制
配置管理长长的命令,难以记录和复用清晰的 YAML 文件,易于阅读、版本管理和共享
持久化需手动指定主机绝对路径可使用相对路径(如 ./data),管理更方便
安全性密码在命令历史中可见可通过 .env 文件隔离敏感信息,更安全
管理命令docker start/stop/rm <name>docker-compose up/down/start/stop (基于项目)
资源限制run 命令中直接指定在 YAML 文件中声明
扩展性差,运行多个相关容器很麻烦极佳,可以轻松定义多服务应用(如 App + DB)

PS:如果遇到数据卷挂载权限问题,可以选择使用user:root 或者直接创建数据卷由docker自动管理

到此这篇关于Docker 部署 Microsoft SQL Server 指南的文章就介绍到这了,更多相关Docker 部署 Microsoft SQL Server内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker build创建镜像命令示例实践

    Docker build创建镜像命令示例实践

    本文讲解Dockerfile的核心概念、基础指令、构建流程及优化技巧,涵盖镜像层结构、构建上下文、常用命令参数,强调多阶段构建、轻量镜像等最佳实践,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  • Docker 批量删除容器或镜像的操作方法

    Docker 批量删除容器或镜像的操作方法

    这篇文章主要介绍了Docker 批量删除容器或镜像的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • docker部署Vaultwarden密码共享管理系统的实现(图文)

    docker部署Vaultwarden密码共享管理系统的实现(图文)

    Vaultwarden是一个开源的密码管理器,它提供了类似于Bitwarden的功能,允许用户安全地存储和管理密码、敏感数据和身份信息,本文主要介绍了docker部署Vaultwarden密码共享管理系统的实现,感兴趣的可以了解一下
    2023-10-10
  • Docker 配置容器固定IP的方法

    Docker 配置容器固定IP的方法

    这篇文章主要介绍了Docker 配置容器固定IP,下面使用docker自带的network实现固定ip分配,并且重启不会消失,通过绑定步骤给大家介绍的非常详细,需要的朋友参考下吧
    2022-04-04
  • Windows下使用Docker部署Qdrant向量库镜像服务详细教学

    Windows下使用Docker部署Qdrant向量库镜像服务详细教学

    在 Windows 系统上直接安装 Qdrant 服务环境时,可能会因为依赖或权限等问题导致安装失败,这时可以借助 Docker 容器来部署 Qdrant 服务,下面就跟随小编一起来看看具体操作步骤吧
    2025-06-06
  • Docker Machine是什么?

    Docker Machine是什么?

    Docker Machine是什么?这篇文章主要介绍了Docker官方提供的一个工具Docker Machine,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Docker下MySQL配置文件不生效的解决方法(超全面!)

    Docker下MySQL配置文件不生效的解决方法(超全面!)

    在Docker中运行MySQL并遇到需要调整配置的情况时,比如想要关闭ONLY_FULL_GROUP_BY的严格模式,我们可以通过以下步骤来实现sql_mode的修改:以下是解决此类问题的步骤和思路,需要的朋友可以参考下
    2024-09-09
  • Docker镜像管理常用操作代码示例

    Docker镜像管理常用操作代码示例

    这篇文章主要介绍了Docker镜像管理常用操作代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • docker终端中如何修改时区

    docker终端中如何修改时区

    解决Docker时区问题需检查容器是否包含Shanghai时区文件,若无则从主机复制,通过命令验证时区设置,确保正确,总结为个人经验,供他人参考
    2025-07-07
  • Docker基础和常用命令详解

    Docker基础和常用命令详解

    这篇文章主要介绍了Docker基础和常用命令方法的相关资料,需要的朋友可以参考下
    2022-11-11

最新评论