Mac Docker环境下SQL Server 2017 Linux无法通过SQL Operations Studio恢复备份
解决Mac Docker中SQL Server Linux访问宿主机Downloads备份文件的问题
这问题我之前也碰到过,核心原因是Docker容器是独立的隔离环境,宿主机的Downloads文件夹默认没被挂载到容器里,所以SQL Server在容器内部根本看不到这个备份文件。下面给你两种简单实用的解决办法:
方法一:直接把备份文件复制到容器内部(推荐,无需重启容器)
这种方法最省事,不用动正在运行的容器:
- 打开Mac终端,先查看你的SQL Server容器名称或ID:
输出里的docker psNAMES列就是容器名,比如可能是sqlserver2017。 - 用
docker cp命令把Downloads里的备份文件复制到容器的SQL Server默认备份目录(这个目录权限适配SQL Server,不用额外调整):
举个实际例子,如果备份文件是docker cp ~/Downloads/你的备份文件名.bak 容器名或ID:/var/opt/mssql/backup/mydb_backup.bak,容器名是sql2017,命令就是:docker cp ~/Downloads/mydb_backup.bak sql2017:/var/opt/mssql/backup/
方法二:挂载宿主机Downloads到容器(适合长期需要访问该目录的场景)
如果你希望以后都能直接从容器访问Downloads里的文件,可以把这个目录挂载到容器:
- 先停止运行中的容器:
docker stop 容器名或ID - 重新启动容器,加上
-v参数把宿主机的Downloads挂载到容器的备份目录:
注意:记得替换命令里的容器名、SA密码,如果你之前启动容器时有其他自定义参数(比如修改端口),也要一并加上。docker run -d -p 1433:1433 --name 容器名 -v ~/Downloads:/var/opt/mssql/backup -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=你的SA密码' mcr.microsoft.com/mssql/server:2017-latest
后续恢复备份的操作
不管用哪种方法,现在在SQL Operations Studio里恢复备份时,目标路径要写容器内部的路径,也就是:
/var/opt/mssql/backup/你的备份文件名.bak
可能遇到的权限问题
如果恢复时提示权限不足,那就是复制进去的文件权限不对,你可以进入容器修改权限:
- 进入容器的bash终端:
docker exec -it 容器名或ID bash - 修改备份文件的所有者为mssql用户:
chown mssql:mssql /var/opt/mssql/backup/你的备份文件名.bak - 输入
exit退出容器,再尝试恢复就没问题了。
内容的提问来源于stack exchange,提问作者Mostafa Al Belliehy
相关产品推荐
相关产品推荐

