2017-12-31 37 views
1

Codeigniter 3.0 kann keine Verbindung zu lokalen MySQL, so lassen Sie mich bitte den Grund wissen.Codeigniter mysql kann keine Verbindung in Docker

Fehlermeldung ist SQLSTATE [HY000] [2002] Verbindung abgelehnt. Mein Codeigniter arbeitet an Docker.

Speziell auf Docker in Mac

  • php-fpm 7.1
  • MySQL 5.7
  • Nginx 2,4

Containers arbeiten.

Und das MySQL-Container kann von Sequel Pro oder Mac-Terminal verbunden werden, nur von Codeigniter kann verbinden.

Erfolgreiche Verbindungscode von meinem Mac-Terminal

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()); 

} 

Ergebnis - SQLSTATE [HY000] [2002] Verbindung verweigert.

/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 
); 

Andockfensters-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 

etc/mysql/mysql.conf.d/mysqld.cnf in MySQL Behälter

[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 
+1

Wie das lokal in '/ config/database.php' Änderung' 'Port' => '4306', 'auf' 'Port' => '3306', 'Sie nur auf 4306 von außen in Verbindung bringen würden die Brücke, zB dein Laptop. –

+0

Da db_test.php die CodeIgniter-Datenbankbibliothek nicht verwendet, denke ich, dass das Problem nicht mit CodeIgniter ist. – DFriend

+0

Danke! Ich habe versucht Port 3306, aber das Ergebnis war das gleiche. –

Antwort

0

Ihre Datenbankverbindung innerhalb des PHP-Container ist:

mysql:3306 

Da Sie in Ihrer compioser Datei „Link“ die phpcontainer zum databaser Behälter und ein Link ist essentliation Zugabe einer Zeile in der Hosts-Datei , so wird mysql auf die ip im internen docker-netzwerk für dich zeigen.

0

@ lvthillo Wir konnten eine Verbindung herstellen, indem wir die Host-Einstellung auf den mysql-Container setzten!

'mysql:dbname=******;host=mysql;charset=utf8' 
Verwandte Themen