🗣 Wd提问: php连接mysql docker
🤖 Ai回答: 在 PHP 中连接 MySQL Docker 容器,你可以按照以下步骤进行配置。这个过程包括:
1、启动 MySQL 容器
2、配置 PHP 连接 MySQL
3、确保网络互通
✅ 步骤 1:运行 MySQL Docker 容器
使用 `docker run` 启动一个 MySQL 容器,例如:
bash
docker run name mysql-container \
-e MYSQL_ROOT_PASSWORD=your_password \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypassword \
-p 3306:3306 \
-d mysql:8.0
说明:
`-e` 设置环境变量(如用户名、密码、数据库名)
`-p 3306:3306` 将宿主机的 3306 端口映射到容器
`mysql:8.0` 使用 MySQL 8.0 镜像
✅ 步骤 2:PHP 连接 MySQL
方法一:使用 PDO(推荐)
php
<?php
try {
$pdo = new PDO(
'mysql:host=localhost;dbname=myapp;charset=utf8',
'myuser',
'mypassword',
[
PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE = PDO::FETCH_ASSOC,
]
);
// 测试查询
$stmt = $pdo-query(SELECT VERSION());
$version = $stmt-fetch();
echo MySQL Version: 、$version['VERSION()'];
} catch (PDOException $e) {
echo Connection failed: 、$e-getMessage();
}
?
方法二:使用 MySQLi
php
<?php
$mysqli = new mysqli(localhost, myuser, mypassword, myapp);
if ($mysqli-connect_error) {
die(Connection failed: 、$mysqli-connect_error);
}
echo Connected successfully;
$result = $mysqli-query(SELECT VERSION());
$row = $result-fetch_assoc();
echo MySQL Version: 、$row[VERSION()];
?
✅ 步骤 3:Docker 网络配置(可选但推荐)
如果你希望 PHP 应用也运行在 Docker 中,建议使用 Docker Compose 来管理多个服务。
示例 `docker-compose.yml`
yaml
version: '3.8'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: your_password
MYSQL_DATABASE: myapp
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
ports:
3306:3306
volumes:
mysql_data:/var/lib/mysql
php-app:
image: php:8.1-apache
depends_on:
mysql
ports:
8080:80
volumes:
./www:/var/www/html
networks:
app-network
volumes:
mysql_data:
networks:
app-network:
driver: bridge
然后运行:
bash
docker-compose up -d
此时,在 PHP 代码中连接 MySQL 应使用容器名作为主机:
php
$pdo = new PDO(
'mysql:host=mysql;dbname=myapp;charset=utf8', // host 是 mysql(容器名)
'myuser',
'mypassword'
);
注意:当两个服务在同一个 Docker 网络中时,可以直接用服务名(如 `mysql`)访问。
🛠️ 常见问题排查
| 问题 | 解决方案 |
| `Connection refused` | 检查 MySQL 是否已启动,端口是否映射正确 |
| `Access denied` | 检查用户名、密码、数据库权限 |
| `Can't connect to MySQL server on 'localhost'` | 如果 PHP 在容器中,应使用 `mysql` 而不是 `localhost` |
| `MySQL is not running` | 查看日志:`docker logs mysql-container` |
✅ 总结
本地 PHP → MySQL Docker:用 `localhost:3306`
PHP Docker → MySQL Docker:用 `mysql`(服务名)或自定义网络
推荐使用 `docker-compose` 管理多容器应用
如果你有具体的错误信息或场景(比如 Laravel、Symfony、CLI 脚本等),可以告诉我,我可以提供更详细的解决方案。
📣 商家广告:





0
IP地址: 143.42.38.65
搜索次数: 93
提问时间: 2025-12-23 16:53:45
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。