Docker容器内的Unity服务器连接同Linux虚拟机上的MySQL时出现CryptographicException: Chain instance is empty错误
Docker容器内的Unity服务器连接同Linux虚拟机上的MySQL时出现CryptographicException: Chain instance is empty错误
看起来你遇到的这个SSL握手失败的问题,我之前帮朋友排查过类似的情况,大概率是容器内Mono运行时的SSL证书验证和MySQL的SSL配置不兼容导致的,结合你的场景,给你几个可以一步步测试的解决方案:
1. 先禁用SSL连接测试(快速验证)
你的报错信息里明确提到了CryptographicException: Chain instance is empty,这是Mono在尝试验证MySQL的SSL证书时找不到可信根证书导致的。最快的测试方法是在连接字符串里强制关闭SSL验证:
修改你的connectionString,添加SslMode=None;参数:
string connectionString = "Server=127.0.0.1;" + "Database=unity_data;" + "UserID=unity;" + "Password=<your_password>;" + "Pooling=false;" + "SslMode=None;";
然后重新打包容器测试,如果dbcon.Open()能成功走到Debug.Log("4"),那基本可以确定是SSL验证的问题。
2. 确认MySQL用户与网络配置
虽然你用了--network host让容器共享宿主机网络,但还是要再检查两个点:
- 确认MySQL的
bind-address配置:打开宿主机的MySQL配置文件(通常是/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),查看bind-address是否设置为127.0.0.1或0.0.0.0(如果要允许外部访问的话),确保宿主机本地能正常连接。 - 确认用户权限:登录宿主机的MySQL,执行
SELECT user, host FROM mysql.user WHERE user='unity';,确认unity用户的host是127.0.0.1,和你连接字符串里的Server地址匹配;同理unity2@localhost对应的是socket连接,你可以在连接字符串里把Server改成localhost同时去掉SslMode=None试试socket连接是否能绕开SSL问题。
3. 容器内安装根证书(如果需要保留SSL)
如果你的MySQL必须开启SSL连接,那需要让容器内的Mono运行时信任MySQL的SSL证书:
- 找到宿主机MySQL的SSL证书位置,通常在
/etc/mysql/ssl/目录下(包含ca.pem、server-cert.pem等文件)。 - 在启动容器时,把证书目录挂载到容器内,比如修改
docker run命令:docker run --network host -v /etc/mysql/ssl:/container/mysql-ssl -p 7777:7777/udp private_repository_name:tag_name - 修改Unity的连接字符串,指定证书路径:
string connectionString = "Server=127.0.0.1;" + "Database=unity_data;" + "UserID=unity;" + "Password=<your_password>;" + "Pooling=false;" + "SslMode=Required;" + "SslCa=/container/mysql-ssl/ca.pem;";
4. 用命令行排查连接问题
为了排除Unity代码的问题,你可以在容器内安装MySQL客户端,直接测试连接:
- 进入运行中的容器:
docker exec -it <container_id> bash - 安装mysql-client(根据容器的基础镜像选择命令,比如Debian/Ubuntu用
apt update && apt install mysql-client) - 执行连接命令:
mysql -h 127.0.0.1 -u unity -p unity_data,输入密码后看能不能成功登录。- 如果命令行能登录,那问题肯定出在Unity的Mono环境或MySQL驱动上,回到步骤1或3解决;
- 如果命令行也登不上,那就是MySQL的用户权限或网络配置问题,重点排查步骤2。
先从步骤1开始测试吧,这个是最快定位问题的方法,毕竟SSL证书问题在容器化的Mono应用里太常见了😂
内容来源于stack exchange
相关产品推荐
相关产品推荐

