Docker容器如何挂载外部SQL Server存储文件及迁移备份数据
挂载外部存储到SQL Server容器
操作分为两步:先将Fortress/云存储挂载到Docker宿主机,再将挂载目录绑定到SQL Server容器内的存储路径。
- 挂载外部存储到宿主机
如果是SMB协议的Fortress存储,在Linux宿主机上先安装cifs-utils,再执行挂载命令,注意要给SQL Server默认运行用户(UID/GID为10001)开放目录权限:
sudo apt install cifs-utils sudo mount -t cifs //192.168.10.101/你的共享目录名 /mnt/sql-external-data -o username=共享账号,password=共享密码,uid=10001,gid=10001
如果是云厂商提供的NAS/对象存储挂载服务,直接按照对应云厂商的官方文档将存储挂载到宿主机/mnt/sql-external-data路径即可。
2. 绑定目录到SQL Server容器
- 如果你还未创建容器,启动时直接加
-v参数绑定目录:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=你的SA密码" \ -p 1433:1433 --name sqlserver \ -v /mnt/sql-external-data:/var/opt/mssql/data \ -d mcr.microsoft.com/mssql/server:latest
- 如果你已经有正在运行的容器,先将容器内的现有数据库文件迁移到外部存储再重新挂载:
- 停止容器:
docker stop sqlserver - 拷贝容器内的数据库文件到外部存储目录:
docker cp sqlserver:/var/opt/mssql/data/. /mnt/sql-external-data/ - 确认文件权限:
sudo chown -R 10001:10001 /mnt/sql-external-data - 用上面带
-v参数的启动命令重新创建容器即可。
- 停止容器:
注意:如果容器和外部存储部署在不同网络环境,需要保障两端网络延迟低于20ms,否则会严重影响SQL Server读写性能
迁移备份文件到Windows设备
有两种常用方案:
- 中转拷贝方案
- 先将备份文件从容器拷贝到Docker宿主机:
docker cp sqlserver:/var/opt/mssql/data/xxxx.bak /宿主机本地路径/ - 再从宿主机传输到Windows:如果是Linux宿主机可以用smbclient直接传到Windows共享目录,也可以在Windows端用scp命令拉取文件:
scp 宿主机用户名@宿主机IP:/宿主机本地路径/xxxx.bak D:\你要存放的本地路径\
- 直接存储方案
备份数据库时直接指定备份路径到已经挂载的外部共享目录,备份完成后直接从Fortress/云存储拷贝到Windows即可,无需经过容器中转。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

