You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac Docker环境下SQL Server 2017 Linux无法通过SQL Operations Studio恢复备份

解决Mac Docker中SQL Server Linux访问宿主机Downloads备份文件的问题

这问题我之前也碰到过,核心原因是Docker容器是独立的隔离环境,宿主机的Downloads文件夹默认没被挂载到容器里,所以SQL Server在容器内部根本看不到这个备份文件。下面给你两种简单实用的解决办法:

方法一:直接把备份文件复制到容器内部(推荐,无需重启容器)

这种方法最省事,不用动正在运行的容器:

  1. 打开Mac终端,先查看你的SQL Server容器名称或ID:
    docker ps
    
    输出里的NAMES列就是容器名,比如可能是sqlserver2017。
  2. 用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里的文件,可以把这个目录挂载到容器:

  1. 先停止运行中的容器:
    docker stop 容器名或ID
    
  2. 重新启动容器,加上-v参数把宿主机的Downloads挂载到容器的备份目录:
    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
    
    注意:记得替换命令里的容器名、SA密码,如果你之前启动容器时有其他自定义参数(比如修改端口),也要一并加上。

后续恢复备份的操作

不管用哪种方法,现在在SQL Operations Studio里恢复备份时,目标路径要写容器内部的路径,也就是:

/var/opt/mssql/backup/你的备份文件名.bak

可能遇到的权限问题

如果恢复时提示权限不足,那就是复制进去的文件权限不对,你可以进入容器修改权限:

  1. 进入容器的bash终端:
    docker exec -it 容器名或ID bash
    
  2. 修改备份文件的所有者为mssql用户:
    chown mssql:mssql /var/opt/mssql/backup/你的备份文件名.bak
    
  3. 输入exit退出容器,再尝试恢复就没问题了。

内容的提问来源于stack exchange,提问作者Mostafa Al Belliehy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:00:23