docker 部署 php 项目时,数据库连接失败可通过以下方法解决:暴露数据库端口;创建网络连接数据库和 php 容器;使用服务发现,在容器内使用数据库名称连接;安装 pdo mysql 扩展;使用环境变量连接数据库。
Docker 部署 PHP 项目时数据库连接失败的解决方法
部署 PHP 项目到 Docker 时,由于容器的隔离特性,项目可能无法连接到外部数据库。针对这一问题,有以下解决方法:
1. 暴露数据库端口
立即学习“PHP免费学习笔记(深入)”;
在 Dockerfile 中,将数据库端口暴露给容器,例如:
EXPOSE 3306
登录后复制
2. 创建网络
使用 Docker 创建一个网络,将数据库和 PHP 容器连接起来,例如:
docker network create my-network
登录后复制
3. 将数据库连接到网络
将数据库容器连接到创建的网络,例如:
docker run -d --name my-database --network my-network -p 3306:3306 mysql
登录后复制
4. 将 PHP 容器连接到网络
将 PHP 容器连接到同一网络,例如:
docker run -d --name my-php --network my-network -v /localpath:/var/www -p 80:80 php:7.4-apache
登录后复制
5. 使用服务发现
使用 Docker 服务发现功能,在容器内部使用数据库名称而不是 IP 地址进行连接,例如:
Docker Compose
version: "3.9" services: php: build: . volumes: - ./:/var/www depends_on: - database database: image: mysql:8.0
登录后复制
Dockerfile
FROM php:7.4-apache RUN docker-php-ext-install pdo_mysql ENV DB_HOST=database ENV DB_USER=root ENV DB_PASSWORD=password ENV DB_NAME=mydatabase
登录后复制
PHP 代码
<?php $dsn = "mysql:host=$DB_HOST;dbname=$DB_NAME"; $user = $DB_USER; $password = $DB_PASSWORD; try { $conn = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo "Database connection failed: " . $e->getMessage(); }
登录后复制
实战案例
假设我们有一个 PHP 项目,需要连接到 MySQL 数据库。数据库容器名为 my-database,PHP 容器名为 my-php。
- 按照上述步骤暴露数据库端口、创建网络并连接容器。
- 在 PHP 容器的 Dockerfile 中,使用 docker-php-ext-install 安装 PDO MySQL 扩展。
- 在 PHP 代码中,使用环境变量连接到数据库。
成功连接后,PHP 项目能够顺利访问 MySQL 数据库。
以上就是Docker 部署 PHP 项目时数据库连接失败,如何处理?的详细内容,更多请关注php中文网其它相关文章!