---
# System prepended metadata

title: macOS M4 使用 Docker 安裝 SQL Server
tags: [公開, Docker, MSSQL]

---

# macOS M4 使用 Docker 安裝 SQL Server

## 0. 開啟 Rosetta，Apple Silicon 必做（目前發現不用，可越過這段）

1. 開啟 **Docker Desktop → Settings → Features in development**
2. 勾選 **Use Rosetta for x86/amd64 emulation on Apple Silicon**
3. **重啟 Docker Desktop**

> ✅ 目的：讓 M4（ARM 架構）能執行 x86_64（amd64）的 SQL Server 映像。

---

## 1. 建立資料持久化目錄

```bash
# 建立資料目錄（持久化）
mkdir -p ~/docker/mssql/data

# 啦取映像檔
docker pull mcr.microsoft.com/mssql/server:2022-latest

# 啟動容器（Apple Silicon 建議加 --platform linux/amd64）
docker run -d \                                  # 以背景模式 (-d) 啟動新容器
  --name mssql \                                 # 指定容器名稱為 mssql
  --platform linux/amd64 \                       # 強制使用 x86_64 架構（Apple M 系列需加此參數）
  -e "ACCEPT_EULA=Y" \                           # 接受 SQL Server 授權條款 (EULA)
  -e "MSSQL_SA_PASSWORD=YourStrong!Passw0rd" \   # 設定系統管理員帳號 (sa) 的登入密碼
  -e "MSSQL_PID=Developer" \                     # 使用免費開發者版本授權
  -e "TZ=Asia/Taipei" \                          # 設定容器內的時區為台北時間
  -p 1433:1433 \                                 # 將主機的 1433 埠對應到容器的 1433 埠（SQL Server 預設埠）
  -v ~/docker/mssql/data:/var/opt/mssql \        # 掛載資料夾以持久化資料（主機 ↔ 容器）
  mcr.microsoft.com/mssql/server:2022-latest     # 指定使用的映像檔（SQL Server 2022 最新版本）
```

> 📂 用途：保存 SQL Server 資料，即使刪容器資料也不會消失。






---

## 2. 啟動 SQL Server 容器

```bash
docker run -d   --name mssql   --platform linux/amd64   -e "ACCEPT_EULA=Y"   -e "MSSQL_SA_PASSWORD=<你的密碼>"   -e "MSSQL_PID=Developer"   -e "TZ=Asia/Taipei"   -p 1433:1433   -v ~/docker/mssql/data:/var/opt/mssql   mcr.microsoft.com/mssql/server:2022-latest
```

> 🔸 `--platform linux/amd64`：Apple M4 必加  
> 🔸 `-v`：掛載資料夾以持久化資料  
> 🔸 `-p 1433:1433`：讓主機透過 1433 埠連線至 SQL Server  

---

## 3. 檢查容器狀態與日誌

```bash
docker ps
docker logs -f mssql
```

看到：`SQL Server is now ready for client connections.`  
即表示 SQL Server 啟動成功 🎉  
離開日誌模式 → **按下 `Ctrl + C`**

---

## 4. 建立測試資料庫與資料表

### 進入 SQL Server 容器內

```bash
docker exec -it mssql bash -lc "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<你的密碼>' -C"
```

```
docker exec -it mssql bash -lc "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<你的密碼>' -C -Q 'SELECT @@VERSION;'"
```

### 建立資料庫 `Test`

```sql
CREATE DATABASE Test;
GO
USE Test;
GO
```

### 建立資料表 `Employees`

```sql
CREATE TABLE Employees (
    EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(50),
    Department NVARCHAR(50),
    Salary INT,
    HireDate DATE
);
GO
```

### 插入測試資料

```sql
INSERT INTO Employees (Name, Department, Salary, HireDate)
VALUES
('Alice', 'IT', 60000, '2023-05-01'),
('Bob', 'Finance', 55000, '2022-09-15'),
('Charlie', 'HR', 50000, '2021-12-20');
GO
```

### 查詢確認

```sql
SELECT * FROM Employees;
GO
```

離開 `sqlcmd`：

```sql
QUIT
```

---

## 5. 刪除測試資料庫（清理環境）

### 重新進入容器

```bash
docker exec -it mssql bash -lc "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<你的密碼>' -C"
```

### 刪除 `Test` 資料庫

```sql
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE Test;
GO
QUIT
```

> ✅ 執行後，`Test` 資料庫會被完全移除。

---

## 6. 從 macOS 主機連線 (使用 DataGrip)

| 項目          | 值                                |
| ------------- | --------------------------------- |
| Database Type | Microsoft SQL Server              |
| Host          | `localhost`                       |
| Port          | `1433`                            |
| User          | `sa`                              |
| Password      | `<你的密碼>`                      |
| Database      | 可選填（例如 Test）               |
| SSL / TLS     | 勾選 **Trust server certificate** |

> 💡 在 DataGrip 連線設定中勾選「Trust server certificate」即可避免憑證錯誤。

### CLI 方式（安裝新版 sqlcmd）

```bash
brew install sqlcmd
sqlcmd -S localhost -U sa -P '<你的密碼>' -C -Q "SELECT name FROM sys.databases;"
```

---

## 7. 常用維運指令（含註解）

```bash
# 查看目前正在運行的所有容器清單
docker ps

# 追蹤指定容器 (mssql) 的即時日誌輸出
# 按下 Ctrl + C 可離開追蹤模式
docker logs -f mssql

# 重新啟動容器 (先停止再啟動)
docker restart mssql

# 停止容器的執行（但不刪除）
docker stop mssql

# 啟動已經停止的容器
docker start mssql

# 強制刪除容器（不會刪除掛載在主機的資料，例如 ~/docker/mssql/data）
docker rm -f mssql
```

---

## 8. 關閉 Docker 與服務

```bash
# 停止單一 SQL Server 容器
docker stop mssql

# 停止所有容器
docker stop $(docker ps -q)

# 刪除 container
docker rm -f mssql

# 關閉 Docker Desktop 應用程式
osascript -e 'quit app "Docker"'
```

重新開啟 Docker Desktop：

```bash
open -a Docker
```

---

## 附註設定

| 項目            | 建議設定                                     |
| --------------- | -------------------------------------------- |
| SQL Server 版本 | `mcr.microsoft.com/mssql/server:2022-latest` |
| 密碼規則        | ≥8 碼，含大小寫、數字、符號                  |
| 建議記憶體      | Docker Desktop → Resources → Memory ≧ 4 GB   |
| 預設資料夾      | `~/docker/mssql/data`                        |
| 預設埠          | 1433（可改為 11433）                         |
| 測試資料庫      | Test（可刪除）                               |
| 測試資料表      | Employees（含三筆測試資料）                  |

