Docker 部署 PHP 项目时数据库连接失败,如何处理?

WBOY
发布: 2024-07-29 13:06:01
原创
986人浏览过

docker 部署 php 项目时,数据库连接失败可通过以下方法解决:暴露数据库端口;创建网络连接数据库和 php 容器;使用服务发现,在容器内使用数据库名称连接;安装 pdo mysql 扩展;使用环境变量连接数据库。

Docker 部署 PHP 项目时数据库连接失败,如何处理?

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 容器连接到网络

SEEK.ai
SEEK.ai

AI驱动的智能数据解决方案,询问您的任何数据并立即获得答案

SEEK.ai 100
查看详情 SEEK.ai

将 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

  1. 按照上述步骤暴露数据库端口、创建网络并连接容器。
  2. 在 PHP 容器的 Dockerfile 中,使用 docker-php-ext-install 安装 PDO MySQL 扩展。
  3. 在 PHP 代码中,使用环境变量连接到数据库。

成功连接后,PHP 项目能够顺利访问 MySQL 数据库。

以上就是Docker 部署 PHP 项目时数据库连接失败,如何处理?的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号