c# - 来自 Docker 的多个 Mysql 连接 -> 套接字错误

标签 c# mysql docker mariadb windows-server-2016

我目前尝试从 VM 迁移到 Docker Windows 容器。容器托管在 Windows Server 2016 数据中心上。操作系统安装在 Hetzner 托管的物理根计算机上。我的 Docker 容器包含一个控制台应用程序,用 c# 编写,对托管在 google-cloud 中的 MariaDB 数据库执行更新。

之前每个控制台应用程序都在具有自己的 ipv4 的单独 VM 中运行。现在他们在容器中运行并得到以下异常

Unhandled Exception: System.TypeInitializationException: The type initializer for 'A.C' threw an exception. ---> MySql.Data.MySqlClient.MySqlException: Authentication to host '##.##.##.##' for user '####' using 
method 'mysql_native_password' failed with message: Reading from the stream has failed. ---> MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed. ---> System.IO.EndOfStreamException: 
Attempted to read past the end of the stream.
   at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)
   at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
   --- End of inner exception stack trace ---
   at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
   at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
   at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
   --- End of inner exception stack trace ---
   at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.AuthenticationFailed(Exception ex)
   at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
   at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate(Boolean reset)
   at MySql.Data.MySqlClient.NativeDriver.Authenticate(String authMethod, Boolean reset)
   at MySql.Data.MySqlClient.NativeDriver.Open()
   at MySql.Data.MySqlClient.Driver.Open()
   at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
   at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
   at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
   at MySql.Data.MySqlClient.MySqlPool.GetConnection()
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at ServiceStack.OrmLite.OrmLiteConnection.Open()
   at ServiceStack.OrmLite.OrmLiteConnectionFactory.OpenDbConnection()
   at A.C.b()
   at A.C..cctor()
   --- End of inner exception stack trace ---
   at A.C.A()
   at A.b..ctor()
   at A.a.A()
   at A.d.A(String[] )
   at A.d.a[A](String[] )
   at A.A.A(String[] )

Docker 使用 NAT 网络。因此,我认为关于来自同一 IP 的多个连接的连接存在问题。

你们有没有人有类似的经验或知道如何解决这个问题?我有点困惑,很高兴能得到任何帮助。提前致谢。

如果您对我的设置或其他任何问题有任何疑问,请告诉我。

问候 迈克尔

最佳答案

这似乎是 MySql.Data 中的常见问题;见 bug 76597 末尾 Rui Fan 的评论寻找潜在的解决方法。

关于c# - 来自 Docker 的多个 Mysql 连接 -> 套接字错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837274/

相关文章:

c# - linq按顺序插入元素的方法

mysql - 我不知道/分组依据?有?子查询?我可以用什么?

postgresql - 等待 Docker 容器准备就绪

postgresql - 尝试在 docker 中备份文件时如何正确指定命名卷

mysql - count对sql有什么影响

docker - 无法使用 docker-compose 文件启动 prometheus。总是抛出错误/etc/prometheus/prometheus.yaml : no such file or directory

c# - 有什么理由不重构它,使其更简单吗?

c# - 字符串中至少一定数量数字的正则表达式

c# - 在 .Net 中准备 SELECT 语句

java - 如何使用 JPA 在 Hibernate 中获取计数?