docker-compose部署phpMyAdmin连接MySQL遇1045权限拒绝错误
phpMyAdmin连接MySQL容器报1045访问拒绝错误的解决方案
问题背景
本地运行以下Docker Compose配置时,phpMyAdmin登录MySQL容器失败,出现访问拒绝错误。
docker-compose.yml 配置
networks: mynet: name: mynet driver: bridge services: mydb: container_name: mydb image: mysql:8.4.2 hostname: mydb restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${ROOT_PASSWORD} MYSQL_DATABASE: default_db networks: - mynet volumes: - ${DATA_VOLUME}:/var/lib/mysql ports: - ${EXPOSE_PORT}:3306 myadmin: container_name: myadmin image: phpmyadmin/phpmyadmin:5.2.1 hostname: myadmin depends_on: - mydb restart: unless-stopped environment: PMA_HOST: mydb # PMA_PORT: 3306 - 我也尝试过添加这个参数 # PMA_ARBITRARY: 1 - 我也尝试过添加这个参数 # MYSQL_USERNAME: "root" - 我也尝试过添加这个参数 MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} networks: - mynet ports: - ${PMA_EXPOSE_PORT}:80
.env 配置
ROOT_PASSWORD=mystrongpwd DATA_VOLUME=/path/to/my/colume EXPOSE_PORT=3333 PMA_EXPOSE_PORT=4444
错误提示
mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'172.26.0.12' (using password: YES)
更新说明:
此前有用户将此问题与“启用远程MySQL连接:ERROR 1045 (28000): Access denied for user”的问题混淆并关闭,但该问题的解决方案并不适用。以下是我找到的可行解决办法:
解决步骤
问题根源是环境变量名称不匹配:
- MySQL容器使用
${ROOT_PASSWORD}作为root用户密码 - phpMyAdmin容器中配置的是
${MYSQL_ROOT_PASSWORD},但.env文件里并未定义这个变量,导致phpMyAdmin传递了错误的密码给MySQL服务。
有两种修改方式:
- 修改phpMyAdmin的环境变量,将
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}改为MYSQL_ROOT_PASSWORD: ${ROOT_PASSWORD},保持和MySQL容器使用同一个变量。修改后的myadmin服务环境变量部分:
environment: PMA_HOST: mydb MYSQL_ROOT_PASSWORD: ${ROOT_PASSWORD}
- 在.env文件中添加
MYSQL_ROOT_PASSWORD=mystrongpwd,确保该变量值和ROOT_PASSWORD一致。
修改完成后,重启容器使配置生效:
docker-compose down docker-compose up -d
重启后即可正常通过phpMyAdmin登录MySQL容器。
内容的提问来源于stack exchange,提问作者amiry jd
相关产品推荐
相关产品推荐

