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

Windows运行Linux容器时Docker Volume挂载MSSQL数据不持久化问题问询

问题根因

你配置的挂载路径完全错误,mssql Linux版的默认数据存储路径不是/data,而是/var/opt/mssql,你的挂载操作没有触及到真正存储数据的目录,所以删除容器后数据自然会丢失。
你之前的配置存在三个明显错误:

  • 首次配置时,你将本地./data目录挂载到了容器内无关的/data路径,mssql不会往该路径写入任何业务数据
  • 后续调整配置时,你搞错了卷挂载的语法规则:卷挂载格式为[宿主机资源/卷名]:[容器内目标路径],你填写的/var/lib/docker/volumes/sssvolume/_data是宿主机上卷的物理存储路径,完全不应该出现在冒号右侧的容器路径位置
  • 你在yaml底部定义的命名卷sssvolume从未被实际使用,服务配置里的挂载项和该命名卷没有关联

正确配置示例

场景1:使用本地绑定挂载持久化(适合开发环境,数据直接存在当前项目的data目录下)

version: '3'
services:
  api:
    image: myimage/myimagename:myimagetag
    environment:
      - SQL_CONNECTION=myserverconnection
    ports:
      - 44384:80
    depends_on:
      - mydatabase
  mydatabase:
    image: mcr.microsoft.com/mssql/server:2019-latest
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=mypassword
    volumes:
      # 把容器内mssql的实际数据目录映射到本地./data路径
      - ./data:/var/opt/mssql
    ports:
      - 1433:1433

场景2:使用Docker命名卷持久化(适合生产环境,由Docker统一管理卷存储,规避Windows路径权限问题)

version: '3'
services:
  api:
    image: myimage/myimagename:myimagetag
    environment:
      - SQL_CONNECTION=myserverconnection
    ports:
      - 44384:80
    depends_on:
      - mydatabase
  mydatabase:
    image: mcr.microsoft.com/mssql/server:2019-latest
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=mypassword
    volumes:
      # 直接关联定义好的命名卷到容器内数据目录
      - sssvolume:/var/opt/mssql
    ports:
      - 1433:1433
volumes:
  sssvolume:
    # 只有提前手动执行docker volume create sssvolume创建的外部卷才需要加下面这行
    # external: true

注意事项

  • Windows环境使用WSL2后端的Docker Desktop时,本地绑定挂载可能出现权限异常导致mssql启动失败,优先使用命名卷方案
  • 调整配置后首次启动前,要先删除之前挂载到错误路径产生的无效本地data目录或者无效卷内容,避免残留文件影响

内容的提问来源于stack exchange,提问作者ygetarts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:42:00