使用docker-compose
编写lnmp容器,pdo连接mysql失败,错误号为2002index.php
代码如下
<?php
try{
$pdo = new PDO('mysql:dbname=test;host=127.0.0.1;charset=utf8mb4;port=3306','root','root');
}catch(PDOException $pe){
die($pe->getMessage());
}
如果host
为127.0.0.1
,报错为:SQLSTATE[HY000] [2002] Connection refused
如果host
为localhost
,报错为:SQLSTATE[HY000] [2002] No such file or directory
目录如下:
docker-compose.yml文件如下:
version: '2'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./site:/usr/share/nginx/html:ro
links:
- "php"
php:
build: ./php
ports:
- "9000:9000"
volumes:
# - ./php/php.conf:/usr/local/etc/php/conf.d/php.conf:ro
- ./site:/usr/share/nginx/html:ro
- ./php/php.ini:/usr/local/etc/php/php.ini:ro
links:
- "mysql"
- "redis"
mysql:
build: ./mysql
volumes:
- ./data/mysql:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: test
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
redis:
image: redis:3.0
ports:
- "6379:6379"
在容器外面,使用mysql客户端连接mysql -uroot -h127.0.0.1 -P3306 -proot
,连接成功。
这就很困惑了,希望大神指点一二。
我的猜测:
找不到文件,这个文件估计指的是mysqld.sock,但是我不知道php容器如何和mysql的sock通讯。再说了,两个容器之间已经link了,还要这么搞吗
PDO里的DSN改成
mysql:host=mysql;dbname=test
host应该是你的 mysql容器名字