Codeigniter mysql无法在docker中连接

问题描述 投票:2回答:2

Codeigniter 3.0无法连接到本地mysql,所以请让我知道原因。

错误消息是SQLSTATE [HY000] [2002]连接被拒绝。我的Codeigniter正在开发Docker。

特别是在mac中的Docker上

  • php-fpm 7.1
  • MySQL 5.7
  • Nginx 2.4

容器正在工作。

并且MySQL容器可以从续集专业版或Mac终端连接,只能从Codeigniter连接。

我的Mac终端成功连接代码

mysql -uroot -h 127.0.0.1-P 4306 -ppassword

db_test.php

<?php
  try {

    $pdo = new PDO(
    'mysql:dbname=******;host=127.0.0.1;charset=utf8',
    'root',
    'password',
    [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]
   );

} catch (PDOException $e) {

   header('Content-Type: text/plain; charset=UTF-8', true, 500);
   exit($e->getMessage()); 

}

结果 - SQLSTATE [HY000] [2002]连接被拒绝。

/config/database.PHP

}elseif (strpos($_SERVER['SERVER_NAME'],'myname') !== false && ENVIRONMENT != "test"){
// MyLocal Setting
$db['default'] = array(
        'dsn'   => '',
        'hostname' => '127.0.0.1',
  'port' => '4306',
        'username' => 'root',
        'password' => 'password',
        'database' => '******',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => TRUE,
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
);

泊坞窗,compose.yml

 version: '2'
   services:
     memcached:
     image: memcached:1.4

   data:
    image: busybox
    volumes:
      - ./misc/data:/var/lib/mysql

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mysql_database
      MYSQL_USER: mysql_user
      MYSQL_PASSWORD: mysql_pw
      socket: /var/run/mysqld/mysqld.sock
    ports:
      - "4306:3306"
    volumes_from:
      - data
    volumes:
      - ../application/initial.sql:/docker-entrypoint-initdb.d/initial.sql
    container_name: mysql
nginx:
    build: ./nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    links:
      - web
    container_name: nginx
    environment:
     - CI_ENV=localhost

  web:
    build: ./php-fpm71
#    build: ./php-fpm56    <- if you want to use PHP5.6
    volumes:
      - /Users/alberorana/codeigniter/suke10:/var/www/html/suke10
      - ./php-fpm71/php.ini:/usr/local/etc/php/conf.d/php.ini
    links:
      - mysql
    environment:
      DATABASE_HOST: '0.0.0.0'
      DATABASE_NAME: 'suke10'
      DATABASE_USER: 'root'
      DATABASE_PASSWORD: 'password'
    container_name: web

MySQL容器中的etc / mysql / mysql.conf.d / mysqld.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
php mysql codeigniter docker nginx
2个回答
2
投票

php容器中的数据库连接是:

 mysql:3306

由于您在compioser文件中,将phpcontainer“链接”到数据库容器,并且链接是在hosts文件中添加一行代码,因此mysql将指向内部docker-network中的ip。


0
投票

@ lvthillo我们能够通过将主机设置设置为mysql容器来连接!

'mysql:dbname=******;host=mysql;charset=utf8'
© www.soinside.com 2019 - 2024. All rights reserved.