Docker 部署 Microsoft SQL Server 完全指南
部署方案對(duì)比
| 特性 | Docker 命令行方式 | Docker Compose 方式 |
|---|---|---|
| 適用場(chǎng)景 | 快速測(cè)試、簡(jiǎn)單部署、臨時(shí)使用 | 正式部署、復(fù)雜應(yīng)用、多環(huán)境配置、需要版本控制 |
| 配置管理 | 單行命令,難以復(fù)用 | 聲明式 YAML 文件,易于管理和版本控制 |
| 持久化 | 需手動(dòng)指定主機(jī)絕對(duì)路徑 | 支持命名卷和相對(duì)路徑,管理更方便 |
| 安全性 | 密碼在命令歷史中可見(jiàn) | 可通過(guò) .env 文件隔離敏感信息 |
| 管理復(fù)雜度 | 簡(jiǎn)單 | 需要編寫 YAML 文件 |
| 擴(kuò)展性 | 較差 | 極佳,可輕松定義多服務(wù)應(yīng)用 |
一、Docker 命令行方式
這種方式直接使用 docker run 命令,適合快速測(cè)試和簡(jiǎn)單部署
1. 拉取官方鏡像
從 Microsoft Container Registry 拉取 SQL Server 2022 的最新 Linux 鏡像
docker pull mcr.microsoft.com/mssql/server:2022-latest

- 注意:如需其他版本(如 2019),將標(biāo)簽改為
:2019-latest
2. 創(chuàng)建本地?cái)?shù)據(jù)目錄(用于持久化)
為了避免容器刪除后數(shù)據(jù)丟失,需要在宿主機(jī)上創(chuàng)建一個(gè)目錄來(lái)映射容器內(nèi)的數(shù)據(jù)存儲(chǔ)位置
mkdir -p /usr/local/docker/sqlserver/data
3. 運(yùn)行容器命令(最關(guān)鍵的步驟)
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 參數(shù)說(shuō)明表
| 參數(shù) | 說(shuō)明 | 必要性 |
|---|---|---|
-d | 后臺(tái)運(yùn)行容器(守護(hù)模式) | 可選 |
--name sql-server | 指定容器名稱 | 可選 |
-e "ACCEPT_EULA=Y" | 接受最終用戶許可協(xié)議 | 必須 |
-e "MSSQL_SA_PASSWORD=..." | 設(shè)置sa用戶密碼(需符合復(fù)雜度要求) | 必須 |
-e "MSSQL_PID=Developer" | 指定版本(Developer/Express/Standard/Enterprise) | 可選 |
-p 1433:1433 | 端口映射(主機(jī)端口:容器端口) | 必須 |
-v /host/path:/var/opt/mssql | 數(shù)據(jù)持久化掛載(主機(jī)路徑:容器路徑) | 推薦 |
--memory="4g" | 限制容器最大內(nèi)存使用 | 推薦 |
--restart unless-stopped | 設(shè)置自動(dòng)重啟策略(除非手動(dòng)停止) | 推薦 |
3.2 密碼復(fù)雜度要求
- 長(zhǎng)度至少8個(gè)字符
- 包含以下字符類型中的至少三種:
- 大寫字母(A-Z)
- 小寫字母(a-z)
- 數(shù)字(0-9)
- 特殊符號(hào)(如!@#$%^&*)
4. 檢查容器狀態(tài)
運(yùn)行后,使用以下命令查看容器是否成功啟動(dòng):
docker ps

- 如果狀態(tài)(STATUS)顯示為
Up ...,則表示運(yùn)行成功。如果顯示為Exited,說(shuō)明啟動(dòng)失敗,需要查看日志
5. 查看日志以排查問(wèn)題
錯(cuò)誤示例

docker logs sql-server
- 常見(jiàn)啟動(dòng)失敗原因:
- 密碼不符合復(fù)雜性要求
- 沒(méi)有設(shè)置
ACCEPT_EULA=Y - 宿主機(jī)端口已被占用(更改
-p參數(shù)即可) - 配置的掛載目錄沒(méi)有訪問(wèn)權(quán)限
sudo chmod -R 777 /usr/local/docker/sqlserver/data
6. 連接測(cè)試
容器運(yùn)行后,你可以使用任何客戶端工具連接
- 服務(wù)器:
ip - 身份驗(yàn)證: SQL Server 身份驗(yàn)證
- 登錄名:
sa - 密碼: 你在
MSSQL_SA_PASSWORD中設(shè)置的密碼 - 端口: 如果你映射的是
1433,直接使用即可

常用管理命令:
* 停止容器: docker stop sql-server * 啟動(dòng)容器: docker start sql-server * 重啟容器: docker restart sql-server * 進(jìn)入容器內(nèi)部bash: docker exec -it sql-server bash * 刪除容器 (?? **會(huì)丟失未持久化的數(shù)據(jù)**): docker rm -f sql-server
二、Docker Compose 方式
這種方式使用一個(gè) docker-compose.yml 文件來(lái)聲明所有配置,更清晰、易于版本控制和復(fù)用,特別適合復(fù)雜應(yīng)用和多環(huán)境部署
1. 創(chuàng)建項(xiàng)目目錄和文件
cd /usr/local sudo mkdir -p /docker/sql-server && cd /docker/sql-server mkdir data && sudo chmod -R 777 data
2. 創(chuàng)建 docker-compose.yml 文件
需要提前創(chuàng)建docker網(wǎng)絡(luò):docker network create fc
使用文本編輯器創(chuàng)建該文件,并填入以下內(nèi)容:
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配置項(xiàng)說(shuō)明表
| 配置項(xiàng) | 說(shuō)明 | 示例值 |
|---|---|---|
image | 使用的Docker鏡像 | mcr.microsoft.com/mssql/server:2022-latest |
environment | 環(huán)境變量配置 | ACCEPT_EULA=Y, MSSQL_SA_PASSWORD=... |
ports | 端口映射配置 | "1433:1433" |
volumes | 數(shù)據(jù)卷映射 | mssql_data:/var/opt/mssql |
mem_limit | 內(nèi)存限制 | 4g |
networks | 網(wǎng)絡(luò)配置 | 自定義橋接網(wǎng)絡(luò) |
(可選)創(chuàng)建 .env 文件管理敏感信息
為了避免將密碼硬編碼在 YAML 文件中,可以創(chuàng)建一個(gè) .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 會(huì)自動(dòng)讀取同目錄下的 .env 文件并注入變量
3. 啟動(dòng)容器
啟動(dòng)容器前,注意開(kāi)放防火墻端口:
# 如果使用 firewalld sudo firewall-cmd --add-port=1433/tcp --permanent sudo firewall-cmd --reload

然后在包含 docker-compose.yml 文件的目錄下,執(zhí)行:
docker compose up -d

-d同樣表示在后臺(tái)運(yùn)行- 這個(gè)命令會(huì)自動(dòng)拉取鏡像(如果本地沒(méi)有)、創(chuàng)建定義的卷、網(wǎng)絡(luò),并啟動(dòng)所有服務(wù)
總結(jié)
| 特性 | Docker 命令行方式 | Docker Compose 方式 |
|---|---|---|
| 適用場(chǎng)景 | 快速測(cè)試、單次運(yùn)行、簡(jiǎn)單任務(wù) | 正式部署、復(fù)雜應(yīng)用、多環(huán)境、需要版本控制 |
| 配置管理 | 長(zhǎng)長(zhǎng)的命令,難以記錄和復(fù)用 | 清晰的 YAML 文件,易于閱讀、版本管理和共享 |
| 持久化 | 需手動(dòng)指定主機(jī)絕對(duì)路徑 | 可使用相對(duì)路徑(如 ./data),管理更方便 |
| 安全性 | 密碼在命令歷史中可見(jiàn) | 可通過(guò) .env 文件隔離敏感信息,更安全 |
| 管理命令 | docker start/stop/rm <name> | docker-compose up/down/start/stop (基于項(xiàng)目) |
| 資源限制 | 在 run 命令中直接指定 | 在 YAML 文件中聲明 |
| 擴(kuò)展性 | 差,運(yùn)行多個(gè)相關(guān)容器很麻煩 | 極佳,可以輕松定義多服務(wù)應(yīng)用(如 App + DB) |
PS:如果遇到數(shù)據(jù)卷掛載權(quán)限問(wèn)題,可以選擇使用user:root 或者直接創(chuàng)建數(shù)據(jù)卷由docker自動(dòng)管理
到此這篇關(guān)于Docker 部署 Microsoft SQL Server 指南的文章就介紹到這了,更多相關(guān)Docker 部署 Microsoft SQL Server內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker Compose網(wǎng)絡(luò)配置指南分享
本文詳細(xì)介紹了Docker網(wǎng)絡(luò)配置的各個(gè)方面,包括基礎(chǔ)網(wǎng)絡(luò)架構(gòu)、自定義網(wǎng)絡(luò)配置、典型場(chǎng)景配置、高級(jí)網(wǎng)絡(luò)技巧、調(diào)試與診斷以及最佳實(shí)踐,通過(guò)多個(gè)實(shí)戰(zhàn)案例和常見(jiàn)問(wèn)題解決方案,幫助讀者更好地理解和應(yīng)用Docker網(wǎng)絡(luò)技術(shù)2025-11-11
Linux Docker運(yùn)行springboot項(xiàng)目的步驟詳解
這篇文章主要介紹了Linux Docker運(yùn)行springboot項(xiàng)目的步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
創(chuàng)建的docker容器時(shí)間顯示錯(cuò)誤/date錯(cuò)誤/時(shí)區(qū)錯(cuò)誤
這篇文章主要介紹了創(chuàng)建的docker容器時(shí)間顯示錯(cuò)誤/date錯(cuò)誤/時(shí)區(qū)錯(cuò)誤的處理方法,一起看看吧2017-06-06
docker如何安裝帶postgis插件的postgresql數(shù)據(jù)庫(kù)
這篇文章主要介紹了docker如何安裝帶postgis插件的postgresql數(shù)據(jù)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Docker中部署Redis集群與部署微服務(wù)項(xiàng)目的詳細(xì)過(guò)程
這篇文章主要介紹了Docker中部署Redis集群與部署微服務(wù)項(xiàng)目,主要包括使用docker部署的好處以及Docker與Kubernetes對(duì)比分析,需要的朋友可以參考下2022-06-06

