搭建AD连接的Linux部署SQL Server容器时kinit报错求助
解决Linux SQL Server容器中kinit刷新Kerberos票据时的预认证失败问题
常见排查与修复步骤:
检查AD账号预认证设置
登录AD域控制器,找到SQL Server对应的服务账号,进入「属性」→「账户」选项卡:- 确保「不需要Kerberos预认证」未被勾选(该选项仅在特定场景下使用,开启后可能导致预认证流程异常)
- 确认账号未被锁定、密码未过期
验证krb5.conf配置
容器内的/etc/krb5.conf必须正确指向AD域,示例配置如下:[libdefaults] default_realm = YOURDOMAIN.COM dns_lookup_kdc = true dns_lookup_realm = true [realms] YOURDOMAIN.COM = { kdc = dc.yourdomain.com admin_server = dc.yourdomain.com default_domain = yourdomain.com } [domain_realm] .yourdomain.com = YOURDOMAIN.COM yourdomain.com = YOURDOMAIN.COM修改配置后,重启SQL Server容器或容器内的SQL服务:
systemctl restart mssql-server确认服务账号密码有效性
直接在容器内执行kinit sqlservice@YOURDOMAIN.COM,手动输入密码测试:- 若提示密码错误,重置AD账号密码后,同步更新SQL Server的AD配置(通过
mssql-conf set network.privilegedadaccount sqlservice@YOURDOMAIN.COM及密码设置) - 若提示密码过期,在AD中重置账号密码并按需设置为永不过期
- 若提示密码错误,重置AD账号密码后,同步更新SQL Server的AD配置(通过
检查容器DNS解析
容器必须能正确解析AD域控制器的主机名,查看DNS配置:cat /etc/resolv.conf,确保DNS服务器为AD域控制器IP或可解析域的DNS服务器。若配置错误,可在启动容器时通过--dns参数指定AD DNS:docker run ... --dns 192.168.1.100验证SPN注册正确性
SQL Server的服务主体名称(SPN)必须与容器主机名匹配并注册到服务账号下:- 在域控制器上执行
setspn -L sqlservice@YOURDOMAIN.COM,检查是否包含MSSQLSvc/container-hostname.yourdomain.com及MSSQLSvc/container-hostname.yourdomain.com:1433 - 若缺失,执行
setspn -A MSSQLSvc/container-hostname.yourdomain.com sqlservice和setspn -A MSSQLSvc/container-hostname.yourdomain.com:1433 sqlservice添加
- 在域控制器上执行
排查主机安全模块限制
若容器主机启用了SELinux或AppArmor,可能阻止kinit操作:- 临时关闭SELinux测试:
setenforce 0,若问题解决,需调整SELinux策略(如添加容器相关规则),而非长期关闭 - AppArmor可通过
aa-status查看状态,必要时临时禁用对应配置测试
- 临时关闭SELinux测试:
内容的提问来源于stack exchange,提问作者fiat
相关产品推荐
相关产品推荐

