2016-04-08 14 views
0

Also habe ich meine Docker-compose.yml Datei die folgendepdo_mysql dsn als Komponist mit

web: 
    build: ./config/apache 
    volumes: 
     - ./code:/var/www/html 

db: 
    build: ./config/db 
    ports: 
     - "3310:3310" 
    environment: 
     MYSQL_ROOT_PASSWORD: root 
     MYSQL_DATABASE: testdatabase 
     MYSQL_USER: test 
     MYSQL_PASSWORD: test 

Ich kann meine phpinfo() sehen, wenn ich einen index.php in meinen Code Verzeichnis hinzuzufügen, so seine adaequat .

Nun will ich versuchen, mit PDO meiner Datenbank zu verbinden

$dsn = 'mysql:host=db;dbname=testdatabase;port=3310'; 
$username = 'test'; 
$password = 'test'; 
$options = [ 
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
]; 

try { 
    $dbh = new PDO($dsn, $username, $password, $options); 
} catch (\PDOException $e) { 
    exit($e->getMessage()); 
} 

Das gibt mir ein

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known 

ich mit

den Host versucht
  • db_1
  • localhost

Aber nichts funktioniert, also was ist die richtige Lösung, um eine dockerisierte Datenbank zu verbinden?

Meine config/db/Dockerfile ist so einfach wie FROM mysql:latest

Meine config/Apache/Dockerfile ist

FROM php:7-apache 

RUN apt-get update && apt-get install -y \ 
     libfreetype6-dev \ 
     libjpeg62-turbo-dev \ 
     libmcrypt-dev \ 
     libpng12-dev \ 
     mcrypt \ 
    && docker-php-ext-install -j$(nproc) iconv mcrypt pdo_mysql zip \ 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
    && docker-php-ext-install -j$(nproc) gd 

COPY ./php.ini /usr/local/etc/php/ 
VOLUME /var/www/html 
+0

Haben Sie 127.0.0.1 für Host versucht? – Pierre

+0

SQLSTATE [HY000] [2002] Verbindung verweigert – Martin

+0

Ich habe festgestellt, dass mysql sich an Port 3306 erstellt - [Hinweis] Server Hostname (Bind-Adresse): '*'; Port: 3306 – Martin

Antwort

2
web: 
    build: ./config/apache 
    volumes: 
     - ./code:/var/www/html 
    links: 
     - db 

db: 
    build: ./config/db 
    ports: 
     - "3306:3306" 
    environment: 
     MYSQL_ROOT_PASSWORD: root 
     MYSQL_DATABASE: testdatabase 
     MYSQL_USER: test 
     MYSQL_PASSWORD: test 

Jetzt kann ich

$dsn = 'mysql:host=db;dbname=testdatabase'; 

Wo Host der Name in der verknüpften Instanz

+0

Diese Antwort funktioniert nicht? – Pierre

+0

Für mich funktioniert es perfekt? – Martin

+0

Arbeitete für mich .. – gvhuyssteen