讲师中心 微信公众号
AI工具推荐 视频效率加速

怎样在Docker中一键搭建MySQL8.0结合phpMyAdmin可视化环境?

夏芳君_4489

夏芳君_4489

发布时间:2026-10-27 09:08:24

|

729人浏览过

|

来源于php中文网

原创

Docker Compose是解决多容器编排痛点的唯一可靠方案:它通过docker-compose.yml统一定义网络、环境变量、启动顺序和健康检查,避免手动docker run导致的DNS不通、密码不一致、认证插件兼容性等90%人卡住的问题。

怎样在docker中一键搭建mysql8.0结合phpmyadmin可视化环境?

docker-compose 是唯一靠谱的一键方案,手动 docker run 搭两个容器并连通网络、配置权限、处理认证插件兼容性,90% 的人会在第 3 步卡住。

为什么必须用 docker-compose.yml 而不是两条 run 命令?

MySQL 8.0 默认使用 mysql_native_password 认证插件,而 phpMyAdmin 官方镜像(phpmyadmin/phpmyadmin)在较新版本中仍依赖旧协议;单独启动时,容器间 DNS 不通、环境变量无法自动注入、root 密码不一致,直接导致 phpMyAdmin 页面报错 #2002 Cannot log in to the MySQL server。

用 docker-compose 可以: - 在同一网络下让容器通过服务名互相解析(如 phpMyAdmin 直接连 mysql-db) - 用 environment 统一传递 MYSQL_ROOT_PASSWORD - 用 depends_on 控制启动顺序(虽不保证 MySQL 已 ready,但配合健康检查可补救) - 所有配置集中在一个文件里,删环境只需 docker-compose down

docker-compose.yml 必须包含的 4 个关键字段

以下是最小可用配置(Windows / macOS / Linux 通用),存为 docker-compose.yml:

version: '3.8'
services:
  mysql-db:
    image: mysql:8.0
    container_name: mysql8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: demo
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro
    ports:
      - "3306:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "-uroot", "-proot123", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10
<p>phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: pma
restart: unless-stopped
depends_on:
mysql-db:
condition: service_healthy
environment:
PMA_HOST: mysql-db
PMA_PORT: 3306
PMA_ARBITRARY: 1
ports:</p><ul><li>"8080:80"
volumes:</li><li>/session

注意点:

  • PMA_ARBITRARY: 1 允许你在登录页手动输入任意 MySQL 主机(绕过硬编码限制)
  • volumes: - /session 是空挂载,避免 phpMyAdmin 报 session 写入失败
  • my.cnf 文件必须存在(哪怕只写一行),否则 MySQL 8.0 容器会因配置缺失退出;内容至少含:
    [mysqld]<br>default_authentication_plugin=mysql_native_password
  • healthcheck 和 depends_on.condition 联用,才能真正等 MySQL 启动完成再拉起 phpMyAdmin
  • 第一次运行前必须做的三件事

    缺一不可,否则大概率白忙活:

    立即学习“PHP免费学习笔记(深入)”;

    Docker Encyclopedia
    Docker Encyclopedia

    Docker 文档优先工作流:针对 Docker 特定问题、故障排除、命令规划、镜像/构建、容器/运行时操作及 Compose 等

    下载
    • 在当前目录创建 ./mysql/conf/my.cnf 并写入认证插件配置(上文已说明)
    • 确保 ./mysql/data 目录为空或不存在——若之前跑过其他 MySQL 容器,残留的 ibdata1 或 mysql.sock 会导致新容器反复 crash
    • Windows 用户确认 Docker Desktop 已启用 WSL 2 后端,并且当前终端(PowerShell / WT)运行在非管理员模式下(管理员模式会干扰 volume 挂载权限)

    访问 phpMyAdmin 时连不上 MySQL 的真实原因

    常见现象是页面显示 mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'172.20.0.3',本质就两个可能:

    一是 mysql-db 容器没起来,执行 docker logs mysql8 看是否报 Can't start server : Bind on unix socket —— 这说明 ./mysql/data 里有残留文件,删掉重来;

    二是 phpmyadmin 容器里的 PMA_HOST 指向错误,别手欠改成 localhost 或 127.0.0.1,它必须填 mysql-db(即 docker-compose 中定义的服务名);

    三是密码不一致:检查 mysql-db 的 MYSQL_ROOT_PASSWORD 和 phpMyAdmin 登录页输的是否完全一样(注意空格、大小写、特殊字符是否被 shell 截断)。

    最省事的验证方式:进 phpMyAdmin 容器执行 nc -zv mysql-db 3306,通了再试登录。不通就别折腾界面,先看 MySQL 容器日志。

    相关文章

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

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

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    Atoms
    Atoms Hot

    Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

    UP简历
    UP简历 Hot

    一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    Laper
    Laper Hot

    Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

    音述AI
    音述AI Hot

    一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

    立刻MV
    立刻MV Hot

    立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

    相关专题

    更多
    php文件怎么打开
    php文件怎么打开

    打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

    11624

    2023.09.01

    php怎么取出数组的前几个元素
    php怎么取出数组的前几个元素

    取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

    6701

    2023.10.11

    php反序列化失败怎么办
    php反序列化失败怎么办

    php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

    2175

    2023.10.11

    php怎么连接mssql数据库
    php怎么连接mssql数据库

    连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

    4248

    2023.10.23

    php连接mssql数据库的方法
    php连接mssql数据库的方法

    php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

    4974

    2023.10.23

    html怎么上传
    html怎么上传

    html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

    3891

    2023.11.03

    PHP出现乱码怎么解决
    PHP出现乱码怎么解决

    PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    5617

    2023.11.09

    php文件怎么在手机上打开
    php文件怎么在手机上打开

    php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    4402

    2023.11.13

    Vite 项目如何打包和部署
    Vite 项目如何打包和部署

    Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

    20

    2026.10.28

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    PostgreSQL vs MySQL
    PostgreSQL vs MySQL

    共1课时 | 192人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn