【问题标题】:pdo_mysql dsn when using composer使用作曲家时的 pdo_mysql dsn
【发布时间】:2016-04-08 11:55:16
【问题描述】:

所以我创建了我的 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

【问题讨论】:

  • 你试过 127.0.0.1 作为主机吗?
  • SQLSTATE[HY000] [2002] 连接被拒绝
  • 我可能发现 mysql 在 3306 端口创建自己 - [注意] 服务器主机名 (bind-address): '*';端口:3306
  • 当我在我的 docker-compose 中公开端口 3306 时,这并没有改变任何东西
  • 重启你的 apache 试试这个:mysql:host=localhost;port=3306;dbname=testdatabase

标签: php mysql docker-compose


【解决方案1】:
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 是链接实例中的名称

【讨论】:

    猜你喜欢
    • 2017-03-13
    • 2022-01-25
    • 2021-08-07
    • 1970-01-01
    • 2022-06-13
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多