飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

Docker环境Phpmyadmin的部署方式实践

Author:飘易 Source:飘易博客
Category:电脑技术 PostTime:2026/4/16 10:35:58
正 文:

一般在Docker环境下,为了方便快速管理mysql,可能会直接在docker配置文件里启动一个phpmyadmin容器,这个容器确实方便,但是需要注意phpmyadmin容器为了方便使用,自身直接集成了 apache + php 的web环境。


phpMyAdmin (PMA) 属于“重量级”工具。对于一个只需要管理数据库的场景,它运行了一整套 Apache 服务器和 PHP 环境,这在容器化时代显得有些“大炮轰蚊子”。


docker-compose.yml 里 :

  5.phpmyadmin管理
  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin_service
    restart: always
    environment:
      - PMA_HOST=db     # 默认连接到你的 MySQL 容器
    ports:
      - "60082:80"

启动容器后,直接 ip:60082 访问管理就可以了。


但是进入后,却发现网站服务器:

Apache/2.4.66 (Debian)
数据库客户端版本: libmysql - mysqlnd 8.3.30
PHP 扩展: mysqli,  curl,  mbstring,  sodium 
PHP 版本: 8.3.30

phpmyadmin容器自己就集成了 Apache/2.4.66 (Debian)、PHP 8.3.30,内存占用了100-200MB,太重,浪费内存资源。


飘易,不建议直接采用 phpmyadmin容器的方式。一个用来“看”数据库的工具,占用的内存竟然能达到数据库本身的 1/4 甚至 1/3,这在追求高并发或低配服务器(如 1核2G)上是非常不划算的。


可以考虑:

  • 本地方案:本地安装 Navicat 或 DBeaver。

优势: 零服务器资源占用。本地软件操作丝滑,支持 SQL 智能提示。

  • 如果偶尔需要网页操作,换成 Adminer。

理由: 只有一个 .php 文件,即插即用,不用时直接删掉或关掉容器,没有任何心理负担。

  • NPM反代一个目录,利用现成的php容器

理由:不增加额外的资源消耗,仅上传一个管理文件夹


这里采用NPM反代方案。


因为容器一般已经集成了 nginx proxy manager + php,所以我们可以直接NPM里新开一个反代目录即可。


先在宿主机 wwwroot 目录下创建目录:

/phpmyadmin/__pma1234/

pma的具体目录建议设置一个不易猜出的目录,比如 __pma12342h09

从官网下载:https://www.phpmyadmin.net/downloads/ 

phpMyAdmin 5.2.3
Released October 8, 2025. See release notes for details.
Current version compatible with PHP 7.2 and newer and MySQL/MariaDB 5.5 and newer.


下载pma,解压到上面的 __pma1234 目录。

config.sample.inc.php 配置文件 改名为 config.inc.php,修改:


$cfg['blowfish_secret'] = '这里设置32位长度的随机字符串';
$cfg['Servers'][$i]['host'] = 'db';// 这里docker容器用db ,不用默认的localhost


NPM新开一个反代:

Details 选项卡:

域名:填公网IP

协议:http

转发主机名 / IP:php74_service (php容器)

转发端口:9000


Locations 选项卡:啥也不填。


Settings 选项卡(齿轮图标):

location /__pma1234 {
    # 根目录指向父目录
    root /www/phpmyadmin;
    index index.php;

    location ~ \.php$ {
        fastcgi_pass php74_service:9000;
        fastcgi_index index.php;
        
        # 核心
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        
        include fastcgi_params;

        # 强制重置一些可能导致 PHP 误解的参数
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        # php隔离
        fastcgi_param PHP_VALUE "open_basedir=/www/phpmyadmin/:/tmp/";
    }
}


配置后,重启下php容器:

docker restart php74_service


后续就可以用 ip/__pma1234/ 进入管理了,如果不需要,也可以随时删除文件夹。平时也不额外占用内存,浪费资源。


但是请留意:

不管容器部署的方式,还是NPM反代的方式,phpmyadmin 5 目前对用户的权限管理可能有bug,登录后会提示你:“ 您没有权限管理用户!”

即使你按照要求创建pma要求的数据库(create_tables.sql),对应的用户(This user "pma" must be defined in config.inc.php (controluser/controlpass)),pma还是会提示:您没有权限管理用户!这可能是一个BUG。


但是正常的创建数据库,导入导出SQL等功能是正常的。


那怎么管理创建用户呢?

通过docker进入mysql容器 或直接在 pma 顶部SQL窗口里执行命令:

docker exec -it mysql_db mysql -u root -p (系统提示输入密码)

-- 第一步:创建用户并设置密码
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';

-- 第二步:授予指定数据库的所有权限(不带 WITH GRANT OPTION 就不具备授权权限)
GRANT ALL PRIVILEGES ON 目标库.* TO '用户名'@'%';

-- 第三步:刷新权限表
FLUSH PRIVILEGES;

查询授权:

SHOW GRANTS FOR 'root'@'%';
返回:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION

SHOW GRANTS FOR 'audi'@'%';
返回:
GRANT USAGE ON *.* TO 'audi'@'%'
GRANT ALL PRIVILEGES ON `audi`.* TO 'audicom'@'%'

docker里通过命令创建用户并授权指定库的操作权限就可以了。

作者:飘易
来源:飘易博客
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:Docker环境下AWStats网站统计部署的流程
下一篇:AI大模型之探测人脸姿态:左右、上下旋转,头部倾斜角度
0条评论 “Docker环境Phpmyadmin的部署方式实践”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
目 录
飘易搜索
最新文章
相关文章
随机文章
© 2007-2030 飘易博客 Www.Piaoyi.Org 版权所有 Sitemap