Linux(Debian11)Docker容器中SQL Server数据库备份问题求助
解决Docker中SQL Server数据库备份的路径与权限问题
问题1:相对路径创建备份后找不到文件
用backup DATABASE testDB to disk='./test.bak'执行成功但找不到文件,核心原因是容器文件系统与宿主机完全隔离,这里的./指向SQL Server在容器内的默认工作目录/var/opt/mssql,备份文件实际存放在容器内的/var/opt/mssql/test.bak路径下。
查看与导出容器内的备份文件
- 查看容器内的备份文件:
docker exec <你的SQL Server容器ID/名称> ls /var/opt/mssql - 将容器内的备份文件复制到宿主机指定目录:
docker cp <容器ID/名称>:/var/opt/mssql/test.bak /home/brutal/backups/
问题2:指定宿主机路径提示权限拒绝
直接使用宿主机路径/home/brutal/backups/test.bak会触发权限错误,因为容器默认无法直接访问宿主机目录,且宿主机的mssql用户组与容器内的mssql用户(固定UID为10001)无权限映射。正确方案是通过目录挂载让容器合法访问宿主机目录:
解决步骤
- 停止运行中的SQL Server容器:
docker stop <容器ID/名称> - 重新启动容器,将宿主机的
/home/brutal/backups目录挂载到容器内的/var/opt/mssql/backups(容器内路径可自定义):
注意:替换命令中的SA密码、容器名称、SQL Server镜像版本为你实际使用的参数。docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=你的SA密码" \ -v /home/brutal/backups:/var/opt/mssql/backups \ -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2022-latest - 在宿主机给挂载目录设置容器内
mssql用户对应的UID权限:chown -R 10001:10001 /home/brutal/backups/ - 执行备份命令时使用容器内的挂载路径:
此时备份文件会直接生成在宿主机的backup DATABASE testDB to disk='/var/opt/mssql/backups/test.bak'/home/brutal/backups/目录下,且无权限问题。
内容的提问来源于stack exchange,提问作者hamed danesh
相关产品推荐
相关产品推荐

