连接到同一容器中的MySQL容器

Jor*_*ren 5 php mysql unix-socket kubernetes google-kubernetes-engine

美好的一天,

我正在使用Kubernetes在Google容器引擎上运行容器。

这个想法是在一个容器中运行两个容器。一个容器使用docker mysql映像,另一个容器运行php,laravel,nginx和composer。

在本地,这可行。这个想法是php可以连接到本地主机上的数据库,并且如果两个容器都在同一个容器中,这应该可以工作。但是,启动pod时,我们会在日志中看到以下消息:

SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Run Code Online (Sandbox Code Playgroud)

唯一的区别是,在本地测试时,我将localhost更改为内部docker ip。

谢谢,美好的一天

Kam*_*ran 5

在Unix上,MySQL程序特别对待主机名localhost,与其他基于网络的程序相比,它可能与您期望的不同。为了连接到本地主机,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给定了--port-P选项来指定端口号,也会发生这种情况。为确保客户端与本地服务器建立TCP / IP连接,请使用--host-h将主机名值指定为127.0.0.1,或者将IP地址或本地服务器名指定为。您还可以通过使用该--protocol=TCP选项来显式指定连接协议,即使是本地主机也是如此。例如:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
Run Code Online (Sandbox Code Playgroud)

--protocol选项使您可以建立特定类型的连接,即使其他选项通常默认为某些其他协议也是如此。

另一个解决方案是使用Kubernetes Volume抽象在容器之间共享路径。/etc/mysql/my.cnf在两个容器的映像上进行编辑,并更改socketMySQL服务器和客户端的位置,以指向共享目录或磁盘。