pdo_mysql 使用 composer 时的 dsn
pdo_mysql dsn when using composer
所以我创建了 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
- 本地主机
但没有任何效果,那么连接到 docker 化数据库的正确解决方案是什么?
我的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
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 是链接实例中的名称
所以我创建了 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
- 本地主机
但没有任何效果,那么连接到 docker 化数据库的正确解决方案是什么?
我的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
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 是链接实例中的名称