2017-04-01 1 views
0

Docker로 손을 더럽 히기 시작했으며 다른 사람이 실행중인 데이터베이스에 연결하기 위해 nginx가있는 도커 컨테이너에서 PHP 응용 프로그램을 실행하려고합니다. MariaDB를 실행하는 컨테이너.MYSQLI MariaDB를 실행하는 다른 도커 컨테이너에 연결할 때 Connection이 거부했습니다.

컨테이너를 실행할 때 내 컴퓨터에서 Sequel Pro를 사용하여 데이터베이스에 문제없이 연결할 수 있지만 nginx 컨테이너에서 실행되는 PHP 응용 프로그램에서 데이터베이스에 연결하려고하면 다음 mysqli가 표시됩니다. 오류 : 오류는 다음과 발생

Warning: mysqli_connect(): (HY000/2002): Connection refused in >/app/web/php/db-config.php on line 7 Failed to connect to the database, died with error:

DB를-config.php를 :

define('DB_HOST', '0.0.0.0:3306'); 
    define('DB_NAME', 'Jumpooling'); 
    define('DB_USER', 'root'); 
    define('DB_PASSWORD', 'root'); 

    $con=mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Failed to connect to the database, died with error:'); 

모든 고정 표시기 - compose.yml 파일 내용이 this 저장소입니다.

무엇이 누락 되었습니까?

+0

..., 크리스 것을 지적 – chris85

+0

감사합니다! DB_HOST와 mysqli_connect 호출에서 한 번만 정의하려고 시도 했으므로 운동하지 못했습니다. 그래서 테스트 종료가 파일의 복사와 이전 버전의 종료로 끝났을 것입니다. 한 번만 정의해도 여전히 작동하지 않습니다! –

답변

3

나는 해결책을 찾기 위해 this 답변을 찾았습니다.

문제는 호스트가 IP 주소로 정의되었지만 docker-compose.yml 파일에 제공된 링크 이름 (즉, db)으로 정의되지 않았기 때문입니다.

마지막 db-config.php 따라서,이다 :

define('DB_HOST', 'db'); 
define('DB_NAME', 'Jumpooling'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', 'root'); 

$con=mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, 3306) or die('Failed to connect to the database, died with error:'); 
0

링크 통신하기 위해 서비스를 활성화 할 필요가 없습니다 - 기본적으로 모든 서비스는 해당 서비스의 이름에서 다른 서비스에 도달 할 수 있습니다.

별칭이 지정된 호스트 이름이나 별칭이 지정되지 않은 경우 서비스 이름에 연결된 서비스 컨테이너에 연결할 수 있습니다. 3306 :

0

당신은 3306 -p 명시 적으로 포트 컨테이너/브라우저를 지정해야합니다 당신은 두 번 포트를 정의하는

docker run --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest 
관련 문제