Linux下docker部署mssql2017修改排序规则报无mssql用户错误如何解决
解决方法
报错根因
第一个No passwd entry for user 'mssql'报错是因为容器执行上下文缺少默认mssql用户配置,手动创建用户后出现权限报错是因为/var/opt/mssql目录归属权为root,mssql用户无读写权限。
推荐方案(无需手动处理用户权限)
官方镜像支持通过环境变量直接指定排序规则,兼容性最好,不会触发权限类问题:
- 停止原有运行的mssql容器
- 执行如下命令启动容器,启动时自动完成排序规则配置:
docker run -e "MSSQL_SA_PASSWORD=你的SA密码" \ -e "MSSQL_COLLATION=SQL_Latin1_General_CP1_CI_AS" \ -v 你的持久化存储卷/本地目录:/var/opt/mssql \ mcr.microsoft.com/mssql/server:2017
注意替换命令中的你的SA密码、你的持久化存储卷/本地目录为你实际使用的配置;如果是已经初始化过的实例,该方案需要先清空持久化存储中的已有数据才会生效
手动修改方案(适配已有数据无需清空的场景)
如果你需要保留已有数据,不想重新初始化,按如下步骤操作:
- 以root身份进入运行中的mssql容器:
docker exec -it --user root <你的容器名称/容器ID> bash - 递归修改mssql数据目录的归属权:
chown -R mssql:mssql /var/opt/mssql - 切换为mssql用户执行排序规则修改命令:
su mssql -c 'echo "SQL_Latin1_General_CP1_CI_AS" | /opt/mssql/bin/mssql-conf set-collation' - 退出容器后重启实例生效:
docker restart <你的容器名称/容器ID>
注意事项
修改排序规则会重置系统库配置,操作前建议提前备份所有用户数据库,修改完成后验证业务数据完整性。
内容的提问来源于stack exchange,提问作者Iter Ator
相关产品推荐
相关产品推荐

