php - docker-compose mysql_pdo 连接失败
问题描述
我有 3 个正在运行的容器,一切都很好(容器正在运行,数据库已设置),除了 PDO 连接不起作用。有错误报告
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection
refused in /var/www/html/lib/OCFram/PDOFactory.php:9 Stack trace: #0 /var/www
/html/lib/OCFram/PDOFactory.php(9): PDO->__construct('mysql:host=mysq...',
'root', 'root') #1 /var/www/html/lib/OCFram/BackController.php(17):
OCFram\PDOFactory::getMysqlConnexion() #2 /var/www/html/lib/OCFram
/Application.php(69): OCFram\BackController->__construct(Object(App\Frontend
\FrontendApplication), 'Welcome', 'index') #3 /var/www/html/App/Frontend
/FrontendApplication.php(17): OCFram\Application->getController() #4 /var/www
/html/bootstrap.php(30): App\Frontend\FrontendApplication->run() #5 {main}
thrown in /var/www/html/lib/OCFram/PDOFactory.php on line 9
docker-compose.yml
version: "3.2"
services:
php:
build: './php/'
volumes:
- ./MediterPourGrandir/:/var/www/html/
apache:
build: './apache/'
depends_on:
- php
- mysql
ports:
- "8080:80"
volumes:
- ./MediterPourGrandir/:/var/www/html/
mysql:
image: mysql:5.6.40
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=monsupersite
- MYSQL_USER=root
- MYSQL_PASSWORD=root
ports:
- "3306:3306"
php 泊坞窗文件
FROM php:7.2.7-fpm-alpine3.7
# RUN apk update; \
# apk upgrade;
# RUN docker-php-ext-install pdo pdo_mysql
# RUN docker-php-ext-install mysqli
RUN apk update --no-cache \
&& apk add --no-cache $PHPIZE_DEPS \
&& apk add --no-cache mysql-dev \
&& docker-php-ext-install pdo pdo_mysql
pdo 连接类
<?php
namespace OCFram;
class PDOFactory
{
public static function getMysqlConnexion()
{
$db = new \PDO('mysql:host=mysql;port=3306;dbname=monsupersite', 'root', 'root');
// $db = new \PDO('mysql:host=mysql;port=3306;charset=utf8', 'root', 'rootpassword');
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
echo "Connected succesfully";
return $db;
}
}
我做了很多不成功的尝试。我错过了一些东西,但找不到......如果有人有想法,那就太好了。
谢谢你。
解决方案
我终于可以知道了。
我没有注意到它,但几秒钟后 mysql 容器正在关闭。原因是:默认情况下,mysql容器名称MYSQL_USER为'root',所以谁想使用'root'作为MYSQL_USER不能声明它。请参阅 github 解决的问题https://github.com/docker-library/mysql/issues/129
通过这些设置,它可以工作。
mysql:
image: mysql:5.6.40
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=monsupersite
- MYSQL_PASSWORD=root
ports:
- "3306:3306"
推荐阅读
- c - 将套接字传递给线程而不是 fd?
- javascript - 有什么方法可以使用节点 js 获取 xlsx 中使用的最大列数?
- rabbitmq - RabbitMQ 集群:无法连接到节点:nodedown
- java - 转换列表
- > 到二维字符数组?
- git - 如何集成 Git + Github + Google Drive?
- python - Python web scraper“find_all(attr)”返回空列表
- c - 我创建了一个整数数组,提示用户选择 2 个数字,我试图从这 2 个数字中返回斐波那契序列
- tcl - NEXT_INST_F 和 NEXT_INST_V 中的“清理”是什么意思?
- angularjs - 如何为 uib-popover 连接到“OnOpen”侦听器?
- c# - 与 Azure 服务总线的本机实现交换 NServiceBus 消息