CI 묻고 답하기

제목 Docker기반 환경에서 CI4와 DB 접속이 안되는 경우
카테고리 CI 4 관련
글쓴이 CI걸음마 작성시각 2022/01/20 17:23:57
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 7122   RSS

우선 저의 CI4 환경은 

https://www.cikorea.net/bbs/view/lecture?idx=20954&lists_style=

위의 글을 참조해서, Docker-compose를 통해서 환경을 구축했습니다.

---

docker-comose.yml

version: '3.1'
services:
    mysql:
        image: 'mysql:5.7'
        working_dir: /application
        volumes:
            - '.:/application'
        environment:
            - MYSQL_ROOT_PASSWORD=1004
            - MYSQL_DATABASE=analysis_googleKeyowrdAd
            - MYSQL_USER=jongin
            - MYSQL_PASSWORD=jongin1004
        ports:
            - '8002:3306'

    webserver:
        image: 'nginx:alpine'
        working_dir: /application
        volumes:
            - '.:/application'
            - './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
        ports:
            - '8000:80'

    php-fpm:
        build: phpdocker/php-fpm
        working_dir: /application
        volumes:
            - '.:/application'
            - './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.4/fpm/conf.d/99-overrides.ini'

 

여기서, 지금 문제가 발생한 부분은

Mysql Workbench에서는 Mysql에 사진과 같이 연결이 되고, 테이블 생성 및 데이터 삽입까지 가능합니다.

 

아래가 현재 실행중인 도커 컨테이너 상황입니다.

 

CI4// Controller.php 

public function index()
    {
        $db = \Config\Database::connect();
        $query   = $db->query('SELECT * FROM Reservation');
        $results = $query->getResultArray();
        var_dump($results);
    }

간단하게, db에 접속해서 Reservation 테이블에 있는 데이터를 조회하는 예제를 만들어서 실행해보면

 

"Unable to connect to the database.

Main connection [MySQLi]: No such file or directory" 

위와 같은 오류가 계속 발생합니다. 

 

 

CI4//  database.php

public $default = [
        'DSN'      => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'analysis_googleKeyowrdAd',
        'DBDriver' => 'MySQLi',
        'DBPrefix' => '',
        'pConnect' => false,
        'DBDebug'  => (ENVIRONMENT !== 'production'),
        'charset'  => 'utf8',
        'DBCollat' => 'utf8_general_ci',
        'swapPre'  => '',
        'encrypt'  => false,
        'compress' => false,
        'strictOn' => false,
        'failover' => [],
        'port'     => 8002,
    ];

위와같이 설정되어있고, password은 일부로 빼둔 상태고 코드에는 제대로 작성되어있습니다. 

hostname을 localhost로도 해보고 도커 컨테이너에 포트가 0.0.0.0:8002->3306이라서 

127.0.0.1:8002로도 바꿔보고 port를 3306로도 해보고 이것저것 바꿔봤는데, 해결이 안되고 있습니다 ㅠㅠ...

 

Docker를 통해서 각기 다른 컨테이너로 생성했기 때문에, 다른 추가적인 설정이 필요한걸까요?? 

 다음글 웹 크롤링 / 서로다른 도메인에서 세션유지 통신 문의 (4)
 이전글 컨트롤러에서 모델 인스턴스를 동적으로 로드하고싶습니다 (3)

댓글

변종원(웅파) / 2022/01/21 09:52:15 / 추천 1

보통 php 설치시 php와 mysql을 연동해줘야 합니다. 아래 링크는 윈도우에서 연동하는 내용인데 리눅스용도 찾아서 참고하세요.

https://velog.io/@yuus95/apache

 

도커 yml 내용은 그냥 각자 설치해준 것 밖에 없고 mysql이 돌아가니까 외부 gui툴에서는 접속이 되는데 php 연동이 안되서 소스에서는 작동을 안하는겁니다.

CI걸음마 / 2022/01/21 14:22:40 / 추천 0

@변종원(웅파)

답변 감사합니다. 참조해서 해결해보겠습니다!