Can#39;t connect to local MariaDB running with Docker with PHP PDO(无法连接到使用带有PHP PDO的Docker运行的本地MariaDB)
问题描述
我有一个本地的Docker Compose堆栈,在我的机器上运行着MariaDB、PHP-fpm和Nginx,用于本地开发。
我可以在我的浏览器上成功地访问http://localhost:8080/上的NGINX服务的网页。
我还可以在主机127.0.0.1、端口8889上使用本地GUIDB浏览器TablePlus成功连接到数据库。它可以使用用户root
和密码root
(但奇怪的是,不能使用我在Docker组合中捕获的MySQL_USER、MYSQL_PASSWORD环境变量设置的任何其他用户)。
无论如何,当我尝试使用以下PHP代码连接到PHP/PDO时,相同的凭据:
$db = new PDO('mysql:host=localhost;port=8889;dbname=words', 'root', 'root');
...我收到Error: SQLSTATE[HY000] [2002] No such file or directory
编辑:当我使用时:
$db = new PDO('mysql:host=127.0.0.1;port=8889;dbname=words', 'root', 'root');
...我收到Error: SQLSTATE[HY000] [2002] Connection refused
为什么?
(这是我的Docker撰写文件:
version: "3"
services:
mariadb:
image: mariadb:10.5
container_name: mariadb-10.5
restart: unless-stopped
ports:
# port 3306 is the default port for mariadb, forwarded to 8889 on the local machine
- 8889:3306
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
php-fpm:
image: bitnami/php-fpm:7.4
container_name: phpfpm-7.4
restart: unless-stopped
ports:
- 9000:9000
volumes:
- ${WWW_DOCUMENT_ROOT}:/app
nginx:
image: bitnami/nginx:1.20
container_name: nginx-1.20
restart: always
ports:
- 8080:8080
volumes:
- ./nginx/logs:/opt/bitnami/nginx/logs/
- ./nginx/server-blocks/default.conf:/opt/bitnami/nginx/conf/server_blocks/default.conf:ro
- ${WWW_DOCUMENT_ROOT}:/app
depends_on:
- mariadb
- php-fpm
)
推荐答案
如@danblack所回答,因为到DB的连接是从一个docker容器内部到另一个容器:
容器之间的连接始终使用未重新映射的端口。因此,到DB容器的连接需要使用内部的MariaDB标准端口3306,而不是重新映射的公开的8889端口。
数据库的主机名必须是数据库容器名(在本例中, MariaDB容器名称
mariadb-10.5
),而不是127.0.0.1
或localhost
。
因此,总而言之,PHP/PDO连接对象变为:
$db = new PDO('mysql:host=mariadb-10.5;dbname=words', 'root', 'root');
这篇关于无法连接到使用带有PHP PDO的Docker运行的本地MariaDB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:无法连接到使用带有PHP PDO的Docker运行的本地MariaDB
基础教程推荐
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01