2017-12-21 1 views
1

나는 다음과 같은 Dockerfile 몇 가지 문제에 봉착 : 나는 슬림 PHP 프레임 워크를 사용하여 연결을 시도하고있어"연결이 거부 됨"을 도커 컨테이너 내부에서 DB에 연결을 시도 할 때

FROM php:7.0-apache 

RUN a2enmod rewrite 

RUN docker-php-ext-install pdo pdo_mysql 

COPY php.ini /usr/local/etc/php/ 
COPY . /var/www/html/ 

을 예외가 발생 코드 여기

HTTP/1.1 500 Internal Server Error Content-Type: text/html {"error": {"text": SQLSTATE[HY000] [2002] Connection refused} 

것 :

// Instantiate a database connection 
$container['db'] = function ($c) { 
    try { 
     $db = $c['settings']['db']; 

     $pdo = new PDO("mysql:host=" . $db['host'], $db['user'], $db['pass']); 

     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

     //Create database if not exists 
     $dbname = "`".str_replace("`","``",$db['dbname'])."`"; 
     $pdo->query("CREATE DATABASE IF NOT EXISTS $dbname"); 
     $pdo->query("use $dbname"); 

     //Create tables if not exists 
     $pdo->query(
      "CREATE TABLE IF NOT EXISTS `Assets` (
       `id` INT AUTO_INCREMENT NOT NULL, 
       `first_property` varchar(50), 
       `second_property` varchar(50), 
       PRIMARY KEY (`id`))" 
     ); 

     return $pdo; 
    } catch (PDOException $e) { 
     return $c['response'] 
      ->withStatus(500) 
      ->withHeader('Content-Type', 'text/html') 
      ->write('{"error": {"text": ' . $e->getMessage() . '}'); 
    } 
}; 
,536를 데이터베이스하지만, 다음과 같은 오류를 반환

누구에게 문제가 있는지 알 수 있습니까?

미리 감사드립니다.

+1

은 PHP 코드와 동일한 컨테이너에있는 데이터베이스입니까? –

+1

^데이터베이스가 어디에 있습니까? –

+0

아무 것도 없습니다. 코드가 없으면 코드가 생성 될 것이라고 생각했습니다. 내가 하나를 포함해야하는지, 그렇다면 어디서 어떻게 포함해야하는지 말해 줄 수 있습니까? 고마워요. – UrmLmn

답변

2

당신은

docker inspect MySQLDB | grep IPA 

는 IP 주소가 연결에 사용할 얻을 ...

docker run --name MySQLDB -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpwd -d mysql:5.7 

다음 (가정 리눅스) 같은 것을 사용하여 MySQL을위한 고정 표시기 컨테이너를 만들 수 있습니다.

+0

답장을 보내 주셔서 감사합니다! 거기에 방법이 있나요, 그래서 어떻게 든 PHP의 상단에 MySQL을 설치할 수 있습니다 : 7.0 - 아파치도 커 컨테이너? – UrmLmn

+2

컨테이너를 사용하는 아이디어는 각 서비스에 대해 다른 컨테이너를 만드는 것입니다. 나는 PHP를 위해 1 개를 가지고 있고, 하나는 MySQL 용이고 다른 하나는 phpmyadmin을위한 것이고 다른 하나는 redis를위한 것이다. –

관련 문제