无法对卷运行SQL Server 2019 Docker并获得错误:安装程序复制系统数据文件失败

svmlkihl  于 2023-01-20  发布在  SQL Server
关注(0)|答案(3)|浏览(256)

当我从Linux主机上运行最新的sql server映像时。
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=asdasdasdsad' -p 1433:1433 -v ./data:/var/opt/mssql/data -d mcr.microsoft.com/mssql/server:2019-latest
我得到错误:

ERROR: Setup FAILED copying system data file 'C:\templatedata\model_replicatedmaster.mdf' to '/var/opt/mssql/data/model_replicatedmaster.mdf':  5(Access is denied.)

此消息仅出现在Linux主机上且具有绑定的卷。

9w11ddsr

9w11ddsr1#

在2019年mssql docker从root用户映像移动到非root用户。这使得带有绑定卷并在Linux主机上运行的docker sql-server容器存在权限问题(=〉没有写入绑定卷的权限)。
这个问题解决方案很少:

1.以根用户身份运行Docker。

例如,组成:

version: '3.6'
services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2019-latest
    user: root
    ports:
      - 1433:1433
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=BLAH
    volumes:
      - ./data:/var/opt/mssql/data

图片来源:www.example.comhttps://github.com/microsoft/mssql-docker/issues/13#issuecomment-641904197

2.设置正确的目录所有者(mssql)

1.检查Docker映像sudo docker run -it mcr.microsoft.com/mssql/server id mssql上mssql用户的ID,得到:uid=10001(mssql) gid=0(root) groups=0(root)
1.更改文件夹的所有者sudo chown 10001 VOLUME_DIRECTORY
西班牙文资料来源:https://www.eiximenis.dev/posts/2020-06-26-sql-server-docker-no-se-ejecuta-en-root/

3.授予完全访问权限(不推荐)

授予对主机sudo chmod 777 -R VOLUME_DIRECTORY上数据库文件的完全访问权限

bjp0bcyl

bjp0bcyl2#

不幸的是,我发现修复这个问题的唯一方法涉及到几个手动步骤。
我使用了以下docker-compose文件来实现此功能

version: '3.9'
services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2019-latest
    platform: linux
    ports:
      - 1433:1433
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_SA_PASSWORD=<testPASSWORDthatISlongENOUGH_1234>
    volumes:
      - ./mssql/data:/var/opt/mssql/data
      - ./backups:/var/backups

(the由于Windows计算机上托管的SQL Server容器的另一个问题,必须直接装载数据目录)
然后,您需要执行以下手动步骤:
1.使用SSMS连接到数据库
1.查找并选择.bak数据库备份文件
1.在容器中打开终端
1.在要创建.mdf.ldf文件的目录中,将创建具有要使用的数据库名称的touch文件

touch /var/opt/mssql/data/DATABASE_NAME.mdf
touch /var/opt/mssql/data/DATABASE_NAME_log.ldf

1.切换选项以使用恢复替换任何现有数据库

1.恢复数据库
我尝试按照这篇https://www.sqlservercentral.com/blogs/using-volumes-in-sql-server-2019-non-root-containers文章中的说明操作,但无法使其工作。
这个问题也在this github issue中讨论过(bot在没有适当解决方案的情况下关闭了这个问题)。

u7up0aaq

u7up0aaq3#

我遇到了与您尝试在DigitalOcean上运行基于sql server的容器相同的问题。user: root也解决了这个问题。

相关问题