php连接docker运行的mysql,显示 (HY000/2002): Connection refused

博客指出PHP连接Docker中运行的MySQL时,不能使用localhost或127.0.0.1,因为每个Docker容器的localhost和127.0.0.1指向自身,并非MySQL容器。应将连接地址修改为母机IP或MySQL容器名称,并给出参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php要连接docker中运行的mysql是不能用localhost 或 127.0.0.1来连接的,因为每个docker运行容器的localhost 和127.0.0.1都是自己容器本身,不是mysql容器,需要修改成母机 IP,或者是mysql容器名称

$dbms='mysql';     //数据库类型
$host='xy_mysql'; //数据库主机名,在docker中,xy_mysql是我的mysql容器的别名
$dbName='test';    //使用的数据库
$user='root';        //数据库连接用户名
$pass='xy123456';   //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";
try {
    $con = new PDO($dsn, $user, $pass); //初始化一个PDO对象
    $con->query('SET NAMES UTF8');
    $res =  $con->query('select * from user');
    while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
        echo "id:{$row['id']} name:{$row['name']}";
    }
} catch (PDOException $e) {
     echo '错误原因:'  . $e->getMessage();
}

参考:
https://blog.youkuaiyun.com/weixin_41282397/article/details/82994370

<think>我们正在使用Docker运行MySQL容器,现在需要进入该容器内的MySQL命令行界面。根据引用[3]提供的方法,我们可以使用`dockerexec`命令进入容器的bashshell,然后通过MySQL命令行工具连接。具体步骤:1.首先确保MySQL容器正在运行(假设容器名为"mysql-container",也可以使用容器ID)。2.使用命令:`docker exec-itmysql-containerbash`进入容器的bash shell。3.然后在容器内部使用:`mysql -uroot -p`来启动MySQL命令行,然后输入密码(在创建容器时通过环境变量MYSQL_ROOT_PASSWORD设置的密码)。另外,引用[4]也提到了在容器内执行命令的方法,但这里我们是要进入交互式的MySQL命令行。因此,我们可以将上述两个步骤合并为一个命令,直接进入MySQL命令行,而不需要先进入bash再执行mysql命令: `docker exec-itmysql-containermysql -uroot -p`这样执行后,系统会提示输入密码,输入正确的密码即可进入MySQL命令行。注意:如果创建容器时没有设置密码(不推荐),则可能需要省略`-p`参数,但通常我们都会设置密码。总结步骤:步骤1:查看正在运行容器,确认MySQL容器的名称或ID。docker ps步骤2:使用以下命令直接进入MySQL命令行(假设容器名为mysql-container):dockerexec -it mysql-container mysql-uroot -p然后输入密码(即创建容器时设置的MYSQL_ROOT_PASSWORD的值)。如果密码正确,就会进入MySQL的命令行界面。另外,引用[3]中还提到了允许外网访问的配置,但这个问题只要求进入命令行,所以不需要配置远程访问。如果遇到问题,可以检查容器是否正在运行,以及容器名称是否正确。相关问题:1.如何查看Docker中正在运行容器?2.如果在创建MySQL容器时没有设置密码,如何进入MySQL命令行?3.如何修改DockerMySQL容器的root密码?4.如何在Docker容器中执行SQL文件?</think>### 如何在Docker中访问MySQL容器命令行 在Docker运行MySQL容器内访问命令行,需按以下步骤操作: #### 📌 步骤1:进入容器终端 ```bash docker exec -it <容器名或ID> bash ``` - **`-it`**:开启交互式终端 - **`<容器名或ID>`**:通过 `docker ps` 查看容器标识 - **示例**:`docker exec -it mysql-container bash`[^2][^3] #### 📌 步骤2:登录MySQL命令行 ```bash mysql -u root -p ``` - 输入容器启动时设置的密码(`MYSQL_ROOT_PASSWORD`环境变量值) - 成功登录后显示 `mysql>` 提示符[^3] #### 💡 一步直达方案(推荐) 直接连接MySQL命令行: ```bash docker exec -it mysql-container mysql -u root -p ``` 系统将提示输入密码,验证后即可操作数据库[^3][^4] --- ### 🔍 关键注意事项 1. **容器必须处于运行状态** - 使用 `docker ps` 确认容器状态 - 若未运行:`docker start <容器名>` 2. **密码验证** - 密码来自容器创建时的 `-e MYSQL_ROOT_PASSWORD=xxx` 参数 - 忘记密码需重置:修改容器配置或重建容器[^1] 3. **用户权限** - 默认使用 `root` 账户,如需其他用户: ```sql CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%'; ``` --- ### ⚠️ 常见问题排查 | 问题现象 | 解决方案 | |---------|----------| | `ERROR 2002` 连接失败 | 检查容器MySQL服务是否运行:`service mysql status` | | 密码错误 | 确认容器启动时的环境变量值,或通过 `docker logs <容器名>` 查看日志 | | 容器运行 | 执行 `docker start <容器名>` 启动容器 | --- ### 📚 相关问题 1. 如何在Docker容器连接MySQL数据库? 2. 如何修改DockerMySQL容器的root密码? 3. 怎样将SQL文件导入到Docker运行MySQL容器?[^4] 4. 如何配置MySQL容器允许远程访问?[^3] [^1]: Docker创建MySQL容器命令参考 [^2]: 容器终端操作指南 [^3]: MySQL容器内权限配置方法 [^4]: SQL文件导入容器操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值