根本原因是配置未持久化或注入:docker容器默认无状态,config.inc.php、session目录、php参数等若未通过volumes挂载或environment变量注入,每次重启/重建即回退镜像初始状态。
容器重启后 phpmyadmin 配置丢失的根本原因
不是“配置丢了”,而是你根本没把配置存进容器能保留的地方。docker 容器默认是无状态的,/etc/phpmyadmin/config.inc.php、/sessions、甚至 php 的 upload_max_filesize 这类设置,只要没通过 volumes 或 environment 显式持久化或注入,每次 docker-compose up -d 或容器重建,就全回退到镜像初始状态。
config.inc.php 修改不生效?别直接改容器里文件
在运行中的 phpMyAdmin 容器里用 vi /etc/phpmyadmin/config.inc.php 手动改,重启就消失——这是最典型的陷阱。官方镜像不支持挂载完整配置目录,也不读取 /etc/phpmyadmin 下的修改。
- 正确做法:用
phpmyadmin镜像自带的PMA_ARBITRARY=1+ Web 界面 setup 模式生成配置,再通过volumes挂载到/etc/phpmyadmin/config.inc.php - 更稳妥的做法:删掉 setup 目录(安全必须),改用环境变量控制连接参数,例如
PMA_HOST=db、PMA_PORT=3306、PMA_USER=root—— 这些会被镜像启动脚本自动写入临时 config - 若必须自定义高级项(如
$cfg['UploadDir']),建一个外部config.user.inc.php,然后volumes挂载到/etc/phpmyadmin/conf.d/(该路径被镜像内 PHP 自动扫描)
session 丢失导致白屏或反复跳登录页
报错 “Error during session start” 或登录后秒退,90% 是因为 session 存在内存临时目录(/tmp 或 /var/lib/php/sessions),容器一重启就清空。
- 必须用命名卷挂载
/sessions:在phpmyadmin服务下加volumes: - pma_sessions:/sessions,并在顶层volumes:块声明pma_sessions: - 不要用
./sessions:/sessions这种相对路径挂载,宿主机目录权限常出问题,尤其 macOS 或 Windows WSL - 确认挂载后容器内
/sessions目录权限为www-data:www-data且可写;可用docker exec -it pma_container ls -l /sessions验证
上传大 SQL 文件失效?PHP 配置不能靠改 ini 文件
改了容器里的 /usr/local/etc/php/php.ini?没用。phpMyAdmin 官方镜像启动时会忽略它,只认环境变量驱动的覆盖逻辑。
- 必须设环境变量:
UPLOAD_MAX_FILESIZE=64M和POST_MAX_SIZE=64M(两者都要,且POST_MAX_SIZE≥UPLOAD_MAX_FILESIZE) - 别设
memory_limit过低,导入大文件时 PHP 可能 OOM,建议至少512M - 这些变量会被镜像写入
/usr/local/etc/php/conf.d/docker-php-ext-upload.ini,比手改 php.ini 更可靠
真正麻烦的不是写几行 docker-compose.yml,而是得想清楚:哪些东西必须靠 volumes 持久化,哪些只能靠 environment 注入,哪些压根不该碰容器内部文件系统。漏掉任意一项,重启后都得重来一遍。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











