当我从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主机上且具有绑定的卷。
3条答案
按热度按时间9w11ddsr1#
在2019年mssql docker从root用户映像移动到非root用户。这使得带有绑定卷并在Linux主机上运行的docker sql-server容器存在权限问题(=〉没有写入绑定卷的权限)。
这个问题解决方案很少:
1.以根用户身份运行Docker。
例如,组成:
图片来源: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
上数据库文件的完全访问权限bjp0bcyl2#
不幸的是,我发现修复这个问题的唯一方法涉及到几个手动步骤。
我使用了以下
docker-compose
文件来实现此功能(the由于Windows计算机上托管的SQL Server容器的另一个问题,必须直接装载数据目录)
然后,您需要执行以下手动步骤:
1.使用SSMS连接到数据库
1.查找并选择
.bak
数据库备份文件1.在容器中打开终端
1.在要创建
.mdf
和.ldf
文件的目录中,将创建具有要使用的数据库名称的touch
文件1.切换选项以使用恢复替换任何现有数据库
1.恢复数据库
我尝试按照这篇https://www.sqlservercentral.com/blogs/using-volumes-in-sql-server-2019-non-root-containers文章中的说明操作,但无法使其工作。
这个问题也在this github issue中讨论过(bot在没有适当解决方案的情况下关闭了这个问题)。
u7up0aaq3#
我遇到了与您尝试在DigitalOcean上运行基于sql server的容器相同的问题。
user: root
也解决了这个问题。