无法使用卷运行 SQL Server 2019 docker 并出现错误:安装程序复制系统数据文件失败

Get*_*toX 22 sql-server docker

当我在 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.)
Run Code Online (Sandbox Code Playgroud)

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

Get*_*toX 34

我发生这种情况是因为缺乏许可。2019 年,mssql docker 从 root 用户映像移至非 root 用户映像。它使得具有绑定卷并在 Linux 主机上运行的 docker sql-server 容器出现权限问题(=> 无权写入绑定卷)。

这个问题的解决方案很少:

1. 以 root 身份运行 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
Run Code Online (Sandbox Code Playgroud)

来源:https ://github.com/microsoft/mssql-docker/issues/13#issuecomment-641904197

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

  1. 检查 docker 镜像上 mssql 用户的 ID sudo docker run -it mcr.microsoft.com/mssql/server id mssql 给出:uid=10001(mssql) gid=0(root) groups=0(root)
  2. 更改文件夹的所有者 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