Docker容器内Mautic连接Azure MySQL遇安全传输禁用错误求助
问题详情
运行Mautic Docker容器连接Azure Database for MySQL时,抛出以下错误:
Warning: mysqli::__construct(): (HY000/3159): Connections using insecure transport are prohibited while --require_secure_transport=ON. in /makedb.php on line 20
MySQL Connection Error: (3159) Connections using insecure transport are prohibited while --require_secure_transport=ON.
当前使用的Docker Compose配置如下:
version: "2" services: mautic: container_name: mautic image: mautic/mautic:v4-apache volumes: - mautic_data:/var/www/html environment: - MAUTIC_DB_HOST=mydbase.mysql.database.azure.com - MAUTIC_DB_USER=mydbuser - MAUTIC_DB_PASSWORD=mydbuserpwd - MAUTIC_DB_NAME=mydbname restart: always networks: - mauticnet ports: - "8880:80" networks: mauticnet: volumes: mautic_data:
Azure Database for MySQL默认启用SSL,且已通过容器外工具成功连接,但Mautic容器无法建立安全连接。
解决方案
1. 添加SSL连接环境变量
Mautic支持通过环境变量指定SSL参数,直接在environment块中追加以下配置即可:
- MAUTIC_DB_PORT=3306 - MAUTIC_DB_SSL=true - MAUTIC_DB_SSL_KEY=/etc/ssl/certs/ca-certificates.crt
容器内的/etc/ssl/certs/ca-certificates.crt包含系统默认根证书,Azure MySQL信任该证书,无需额外下载。
修改后的完整Docker Compose配置:
version: "2" services: mautic: container_name: mautic image: mautic/mautic:v4-apache volumes: - mautic_data:/var/www/html environment: - MAUTIC_DB_HOST=mydbase.mysql.database.azure.com - MAUTIC_DB_USER=mydbuser - MAUTIC_DB_PASSWORD=mydbuserpwd - MAUTIC_DB_NAME=mydbname - MAUTIC_DB_PORT=3306 - MAUTIC_DB_SSL=true - MAUTIC_DB_SSL_KEY=/etc/ssl/certs/ca-certificates.crt restart: always networks: - mauticnet ports: - "8880:80" networks: mauticnet: volumes: mautic_data:
2. 手动挂载Azure SSL证书(如果默认证书无效)
如果上述配置没解决问题,可能是容器内默认证书不包含Azure的根证书,需要手动下载并挂载:
- 下载Azure MySQL根证书:
wget https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
- 在Docker Compose的
volumes中添加证书挂载:
- ./DigiCertGlobalRootCA.crt.pem:/etc/ssl/certs/azure-mysql-ca.crt
- 更新环境变量中的证书路径:
- MAUTIC_DB_SSL_KEY=/etc/ssl/certs/azure-mysql-ca.crt
3. 确认Azure数据库SSL设置
检查Azure门户中数据库的“连接安全性”页面,确保强制SSL连接处于启用状态,同时确认数据库用户没有被限制为非SSL连接。
内容的提问来源于stack exchange,提问作者Krunal

