31
容器中如何共用宿主的mysql.sock
场景:容器中的php应用程序需要使用localhost连接mysql数据库。(假设不想使用“127.0.0.1”或“localhost:3306”代替localhost)
条件:容器的网络模式必须为host, 即docker run --net=host 启动容器。
方法:
1、先确定宿主机mysql.sock文件的位置。最准确的做法是运行mysql -uxxx -p -hlocalhost登入mysql.
再运行status指令, 找到UNIX socket行,比如:UNIX socket: /var/lib/mysql/mysql.sock
2、将mysql.sock所在目录共享给容器,即
docker run --net=host -v /var/lib/mysql:/var/lib/mysql .....
3、修改容器中php.ini文件中的相关配置,按需要修改以下配置项:
mysqli.default_socket = /var/lib/mysql/mysql.sock # 针对mysqli扩展
pdo_mysql.default_socket = /var/lib/mysql/mysql.sock # 针对pdo_mysql扩展
4、编写php脚本以验证:
<?php
$conn = new mysqli('localhost', 'dbuser', 'xxxx');
echo $conn->host_info . "\n";
?>
输出 Localhost via UNIX socket 证明成功。