2017-12-31 89 views
1

Codeigniter 3.0이 로컬 mysql에 연결할 수 없으므로 그 이유를 알려주십시오.Codeigniter mysql이 도커에 연결할 수 없습니다.

오류 메시지는 SQLSTATE [HY000] [2002] 연결이 거부되었습니다. 내 Codeigniter가 Docker에서 작업 중입니다.

구체적 도커에 MAC

  • PHP-FPM 7.1
  • MySQL을 5.7
  • Nginx에 컨테이너 작업 2.4

.

MySQL 컨테이너는 sequel pro 또는 Mac 터미널에서 연결할 수 있으며 Codeigniter에서만 연결할 수 있습니다. 내 맥 터미널에서

성공적인 연결 코드

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을/mysql.conf.d/mysqld.cnf MySQL은 용기

[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 
당신의 compioser 파일에 당신 이후

mysql:3306 

"링크"를 databaser 컨테이너에 phpcontainer 및 링크는 사용자의 호스트 파일에서 라인의 essentliation 추가입니다 : PHP는 컨테이너 내부

+1

=>'4306 ','''포트 '에 =>'3306 ','당신은 단지 외부에서 4306에 연결하는 것 다리, 예를 들어 노트북. –

+0

db_test.php는 CodeIgniter 데이터베이스 라이브러리를 사용하지 않기 때문에 문제는 CodeIgniter와 다르다고 생각합니다. – DFriend

+0

감사! 포트 3306을 시도했지만 결과는 동일했습니다. –

답변

0

데이터베이스 연결은 그래서 mysql은 내부 도커 네트워크의 IP를 가리킨다.

0

@ lvthillo 호스트 설정을 mysql 컨테이너로 설정하여 연결할 수있었습니다! '포트' '/ 설정/database.php` 변화`에 로컬로

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