使用PDO连接Docker部署的MySQL数据库时持续出现Access Denied错误
使用PDO连接Docker部署的MySQL数据库时持续出现Access Denied错误
嘿,我一下子就揪出问题根源啦!你的Docker Compose配置里犯了个MySQL官方镜像的常见小错误——非root用户的环境变量名是MYSQL_USER,不是MYSQL_USERNAME,这直接导致admin用户根本没被正确创建,自然就会出现访问被拒绝的情况!
第一步:修正Docker Compose的DB服务配置
把MYSQL_USERNAME改成MYSQL_USER即可,修正后的配置如下:
db: image: mysql:latest restart: always volumes: - ./database:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: "root" MYSQL_DATABASE: "my_local_db" MYSQL_USER: "admin" # 这里是官方镜像要求的正确变量名 MYSQL_PASSWORD: "admin" ports: - 3306:3306
第二步:清理旧数据卷(必须做!)
因为你之前已经创建过./database本地卷,里面可能残留了错误的用户配置数据,所以需要先彻底清理再重启服务:
# 停止容器并删除关联的卷 docker-compose down -v # 重新启动所有服务 docker-compose up -d
额外验证步骤(如果还是有问题的话)
- 你的PHP连接代码参数是完全正确的:
host=db(和Compose里的服务名对应)、用户名admin、密码admin、数据库名my_local_db,这部分不用改。 - 可以用root用户登录MySQL容器,手动确认用户和数据库是否存在:
# 进入运行中的MySQL容器 docker exec -it [你的DB容器名称] mysql -uroot -proot # 检查admin用户是否存在 SELECT User, Host FROM mysql.user; # 检查目标数据库是否存在 SHOW DATABASES;
这样修改后,应该就能顺利连接到数据库啦!
备注:内容来源于stack exchange,提问作者TripleA
相关产品推荐
相关产品推荐

