首页 > 解决方案 > 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;
  }     
}       

我做了很多不成功的尝试。我错过了一些东西,但找不到......如果有人有想法,那就太好了。

谢谢你。

标签: phpmysqldockerdocker-compose

解决方案


我终于可以知道了。

我没有注意到它,但几秒钟后 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"

推荐阅读