Mac下Docker部署MSSQL时保存容器数据的最佳方式是什么?
MSSQL Docker 容器数据持久化最佳实现方案
优先用 Docker 命名卷 挂载MSSQL数据目录,这是Mac环境下兼容性最好、操作最简便的方案,不会出现文件权限、文件系统兼容性这类绑定挂载常见的问题。
具体操作步骤
- 第一步:创建专属命名卷,专门用来存储MSSQL的所有数据、日志、备份文件
执行命令:docker volume create mssql_test_data - 第二步:启动容器时挂载该卷到MSSQL Linux镜像的默认数据存储路径
/var/opt/mssql
完整启动命令示例:docker run -d \ -e "ACCEPT_EULA=Y" \ -e "SA_PASSWORD=你设置的强密码(需满足MSSQL规则:至少8位,包含大小写字母、数字、特殊字符)" \ -p 1433:1433 \ --name mssql_test \ --mount source=mssql_test_data,target=/var/opt/mssql \ mcr.microsoft.com/mssql/server:latest - 第三步:验证持久化效果
首次启动后用DataGrip连接127.0.0.1的1433端口,创建测试库、插入测试数据后,执行docker rm -f mssql_test删除容器,再重新执行上面的启动命令创建新容器,重新连接就能看到之前的所有数据都完整保留。
额外注意事项
- 不建议直接把Mac本地目录挂载到容器的
/var/opt/mssql路径,Mac的APFS文件系统和Linux的权限模型不兼容,非常容易出现MSSQL进程无权限读写目录的报错,排查成本很高。 - 如果需要备份整个数据库的数据,可以直接导出命名卷的内容到本地:
docker run --rm --volumes-from mssql_test -v $(pwd):/backup ubuntu tar cvf /backup/mssql_data_backup.tar /var/opt/mssql - 只要不手动删除
mssql_test_data这个命名卷,不管你删多少次容器、重启多少次Docker,数据都不会丢失。
内容的提问来源于stack exchange,提问作者Mahdi Amrollahi
相关产品推荐
相关产品推荐

