使用composer时pdo_mysql dsn

时间:2016-04-08 11:55:17

标签: php mysql docker-compose

所以我创建了以下

的docker-compose.yml文件
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

当我将index.php添加到我的代码目录中时,我可以看到我的phpinfo(),所以它的工作正常。

现在我想尝试使用PDO连接到我的数据库

$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());
}

这给了我一个

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

我用

尝试了主机
  • DB_1
  • 本地主机

但没有任何作用,那么连接到dockerized数据库的正确解决方案是什么?

我的config / db / Dockerfile就像FROM mysql:latest

一样简单

我的config / apache / Dockerfile是

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

1 个答案:

答案 0 :(得分: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

现在我可以使用

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

其中host是链接实例中的名称