说明:
- 系统:Ubuntu 24.04 LTS
拉取SQL Server Docker镜像
docker pull mcr.microsoft.com/mssql/server:2022-CU12-ubuntu-22.04
创建数据目录
sudo mkdir /var/mssql_data
sudo chmod 777 /var/mssql_data
说明:
- 权限设置为777(所有用户可读、写、执行)。虽然这确保了Docker容器中的SQL Server有权访问该目录,但从安全角度来看,这种权限设置过于宽松。建议使用更严格的权限,比如770,并确保目录所有者和组设置正确。
运行Docker容器
docker run --name=sqlserver -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=123456MM#' -e 'MSSQL_PID=J4V48-P8MM4-9N3J9-HD97X-DYMRM' -p 1433:1433 -v /var/mssql_data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2022-CU12-ubuntu-22.04
说明:
- ‘ACCEPT_EULA=Y’:接受SQL Server的最终用户许可协议(EULA)。
- ‘MSSQL_SA_PASSWORD=123456MM#’:设置SQL Server的系统管理员(SA)账号密码。注意:使用强密码并避免在公共场合暴露。
- ‘MSSQL_PID=J4V48-P8MM4-9N3J9-HD97X-DYMRM’:指定SQL Server的产品密钥ID。
- /var/mssql_data:/var/opt/mssql:将宿主机的/var/mssql_data目录挂载到容器内的/var/opt/mssql目录。
连接测试
首先确定系统防火墙开放了1433端口
连接完成后,使用一个简单的SQL脚本,用于创建一个数据库和一个示例表,并插入一些数据,最后查询数据
-- 创建数据库
CREATE DATABASE TestDB;
-- 切换到新创建的数据库
USE TestDB;
-- 创建表
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY IDENTITY(1,1),
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
BirthDate DATE,
HireDate DATE,
JobTitle NVARCHAR(50)
);
-- 插入数据
INSERT INTO Employees (FirstName, LastName, BirthDate, HireDate, JobTitle)
VALUES
('John', 'Doe', '1980-01-01', '2005-05-15', 'Software Engineer'),
('Jane', 'Smith', '1985-02-20', '2010-08-01', 'Project Manager'),
('Michael', 'Johnson', '1990-03-15', '2015-12-01', 'Business Analyst');
-- 查询数据
SELECT * FROM Employees;
测试过程中如果出现如下错误,一种解决方法就是重启了一下容器
The connection is broken and recovery is not possible. The connection is marked by the client driver as unrecoverable. No attempt was made to restore the connection.
参考
-
microsoft-mssql-server - Official Image | Docker Hub
-
https://www.cnblogs.com/merray/p/12849100.html