如何修改Docker Compose让phpMyAdmin用SSL连接远程数据库
解决phpMyAdmin Docker容器连接远程数据库的SSL加密问题
问题背景
你已经通过Docker部署了phpMyAdmin,使用Traefik配置了Let's Encrypt证书实现HTTPS访问,且设置PMA_ARBITRARY=1让用户手动输入远程数据库信息。目前phpMyAdmin能正常连接远程数据库,但与数据库的连接未加密(仅前端UI是HTTPS),你已经有可正常使用的远程数据库CA证书,需要配置phpMyAdmin使用该证书加密连接。
核心解决方案
你的思路是正确的,需要通过挂载自定义配置文件和证书到容器,修改phpMyAdmin的SSL连接参数。以下是具体步骤和说明:
1. 编写自定义配置文件config.user.inc.php
在宿主机的~/apps/phpmyadmin/目录下创建该文件,内容如下:
// 为所有手动添加的数据库服务器启用SSL加密 $cfg['Servers'][$i]['ssl'] = true; // 启用SSL证书验证(确保连接的数据库是可信的) $cfg['Servers'][$i]['ssl_verify'] = true; // 指定容器内CA证书的挂载路径 $cfg['Servers'][$i]['ssl_ca'] = '/etc/phpmyadmin/ca.certificate.crt';
2. 修改Docker Compose配置
需要添加两个挂载项,注意去掉路径末尾的多余空格(否则会导致挂载失败),修改后的完整配置如下:
version: '3.3' services: phpmyadmin: container_name: phpmyadmin environment: - PMA_ARBITRARY=1 image: phpmyadmin restart: unless-stopped networks: - traefik - default labels: - "traefik.enable=true" - "traefik.docker.network=traefik" - "traefik.http.routers.phpmyadmin-secure.entrypoints=websecure" - "traefik.http.routers.phpmyadmin-secure.rule=Host(`phpmyadmin.example.com`)" volumes: - ~/apps/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php - ~/apps/phpmyadmin/ca.certificate.crt:/etc/phpmyadmin/ca.certificate.crt networks: traefik: external: true
你的疑问解答
是否需要添加挂载配置?
是的,必须添加这两个挂载:- 挂载
config.user.inc.php让phpMyAdmin加载你的SSL配置 - 挂载CA证书到容器内,让phpMyAdmin可以读取并用于验证数据库连接
- 挂载
config.user.inc.php是否只需包含所需配置?
完全正确。phpMyAdmin会优先加载默认的config.inc.php,再加载用户自定义的config.user.inc.php,用户配置只会覆盖默认配置中对应的参数,其余默认设置保持不变,不需要复制完整的默认配置内容。
额外注意事项
- 权限设置:确保宿主机上的证书和配置文件权限正确,容器内的phpMyAdmin进程需要读取权限,可执行命令:
chmod 644 ~/apps/phpmyadmin/ca.certificate.crt ~/apps/phpmyadmin/config.user.inc.php - Portainer路径问题:如果通过Portainer部署,注意Portainer运行的用户是否有权限访问
~/apps/phpmyadmin/目录,必要时将~替换为绝对路径(例如/home/your-username/apps/phpmyadmin/) - 测试验证:重新部署容器后,手动连接远程数据库,phpMyAdmin UI会显示连接已使用SSL加密
内容的提问来源于stack exchange,提问作者CodeBlue
相关产品推荐
相关产品推荐

