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는 컨테이너 내부
=>'4306 ','''포트 '에 =>'3306 ','당신은 단지 외부에서 4306에 연결하는 것 다리, 예를 들어 노트북. –
db_test.php는 CodeIgniter 데이터베이스 라이브러리를 사용하지 않기 때문에 문제는 CodeIgniter와 다르다고 생각합니다. – DFriend
감사! 포트 3306을 시도했지만 결과는 동일했습니다. –