希望我做错了什么,我已经阅读了所有文档并搜索了论坛,但似乎无法弄清我遇到的问题。我正在使用OSX btw.
正在工作的内容:
- 通过TCP或Socket使用代理从本地操作系统连接到云SQL
- 通过TCP使用容器中的代理从本地操作系统连接到云SQL
- 通过TCP使用同一pod中的代理从GKE连接到云SQL
不起作用的东西:
- 通过套接字使用contain中的代理从本地操作系统连接到云SQL
- 通过套接字使用同一pod中的代理从GKE连接到云SQL
我怀疑这两个问题实际上是同一个问题。我使用这个命令在容器内运行代理:
docker run -v [PATH]:/cloudsql
gcr.io/cloudsql-docker/gce-proxy /cloud_sql_proxy -dir=/cloudsql
-instances=[INSTANCE_CONNECTION_NAME] -credential_file=/cloudsql/[FILE].json
并且关联的套接字是与目录一起生成的。然而,当我尝试连接时,我会得到以下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/cloudsql/node-sql:us-central1:nodedb' (61)
当我尝试连接时,代理不会生成新行,这让我认为它没有接收到请求,它只是说Ready for new connections
并等待。
你知道出了什么问题,或者我该如何进一步解决这个问题吗?
对于"通过套接字在同一个pod中使用代理从GKE连接到云SQL",您可以按照教程进行操作吗https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine?我们有一个工作的WordPress示例,它将cloudsql代理作为sidecar容器(即在同一个Pod中,但通过TCP)。
我不认为你可以"通过套接字在同一个pod中",除非你在一个容器中运行多个进程(这不应该是最佳实践)。如果你使用sidecar容器,你可以使用TCP,所以你不需要unix套接字(此外,我不确定如何在Pod的容器之间共享文件)。
此外,docker run -v /local.sock:/remote.sock
(我认为)将在本地创建一个文件/目录作为/local.sock
,并使其在容器内可用作为/remote.sock
。这可能不起作用,因为docker引擎不知道/local.sock
是Unix套接字,它创建了一个常规文件。