首页 > 解决方案 > Docker for windows sql express 卷数据不持久

问题描述

重新启动计算机后,我很难让我的 mssql-server-windows-express 容器化数据库保留任何创建的行。

它位于我使用 Visual Studio 2017 社区版的默认“启用 Docker 支持”复选框创建的项目中。我正在使用 Entity Framework Core 2 迁移来使用 ASP.NET Core 2.1 创建和更新数据库。

我觉得这个问题可能与 Docker for Windows 具有通常的路径语法有关,但这只是一种预感。

我尝试了很多不同的 Stackoverflow 和博客建议和路径,但数据永远不会存在。我必须在这一点上寻求帮助。

以下是我尝试过的众多 docker-compose 文件和想法中的两个:

version: '3.4'

services:
  webpresentation:
    image: webpresentation
    build:
      context: .
      dockerfile: WebPresentation\Dockerfile

  db:
    image: microsoft/mssql-server-windows-express
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: Test1

    ports:
      - "1433:1433"
    volumes:
      - "C:\\ProgramData\\Docker\\volumes\\dockercompose4363425345347741_sqlvolume:c:\\var/opt/mssql"

volumes:
  sqlvolume:

此文件编译,但重新启动后行不会保留。

version: '3.4'

services:
  webpresentation:
    image: webpresentation
    build:
      context: .
      dockerfile: WebPresentation\Dockerfile

  db:
    image: microsoft/mssql-server-windows-express
    container_name: myDbSqlExpress
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: Test1
      'attach_dbs={"dbName":"MyDb","dbFiles":"C:\\ContainerData\\MyDb.mdf","C:\\ContainerData\\MyDb.ldf"}'


    ports:
      - "1433:1433"
    volumes:
      - "C:\\DockerData:c:\\ContainerData"

volumes:
  sqlvolume:
     name: myDb-sqlvolume

此文件给出错误:

错误 MSB4018 “GetServiceReferences”任务意外失败。Microsoft.Docker.Utilities.CommandLineClientException:yaml.scanner.ScannerError:扫描“C:\Projects\MyProject\MyApp\docker-compose.yml”中的简单键时,第 16 行,第 7 列找不到预期的“:”

我在这里做错了什么?谁能帮我更正任一文件,以便在重新启动计算机后新创建的行仍然存在?

非常感谢!

标签: dockerasp.net-coredocker-composeasp.net-core-2.1docker-for-windows

解决方案


最终允许我在系统重启后持久化数据的 docker-compose.yml 文件如下:

version: '3.4'

services:
  webpresentation:
    image: webpresentation
    build:
      context: .
      dockerfile: WebPresentation\Dockerfile

  db:
    image: microsoft/mssql-server-windows-express
    environment:
      ACCEPT_EULA: Y
      SA_PASSWORD: Test1
      attach_dbs: '[{"dbName":"MyProject","dbFiles":["C:\\DockerDbData\\MyProject.mdf","C:\\DockerDbData\\MyProject_log.ldf"]}]'

    ports:
      - "1433:1433"
    volumes:
      - "C:\\Projects\\MyProject\\DockerDbDataVolume:C:\\DockerDbData"

推荐阅读