Docker部署Directus无法连接Azure SQL Server问题求助
排查步骤与解决方案
1. 移除.env文件中变量的双引号
你的.env文件中所有变量都带有双引号,Docker Compose读取时会将引号包含在实际值中,导致数据库密码、加密选项等参数错误。修改后的.env示例:
DB_CLIENT=mssql DB_HOST=xxx.database.windows.net DB_PORT=1433 DB_DATABASE=xxx DB_USER=xxx DB_PASSWORD=xxx DB_OPTIONS__ENCRYPT=true
2. 验证Docker容器的出站IP是否在Azure SQL防火墙允许列表中
Docker默认桥接模式下,容器出站流量通常使用宿主机公网IP,但部分网络环境可能存在差异:
- 临时测试:在Azure门户的SQL Server防火墙设置中添加
0.0.0.0/0(允许所有IP,测试后立即移除以保证安全),重启容器验证连接。 - 永久解决:获取容器实际出站IP并添加到防火墙白名单:
- 执行命令获取IP:
docker run --rm curlimages/curl ifconfig.me - 将返回的IP添加到Azure SQL防火墙允许列表。
- 执行命令获取IP:
3. 清理旧SQLite缓存数据
之前使用SQLite时,./database卷可能残留旧配置文件,干扰新数据库连接:
- 停止容器:
docker compose down - 删除
./database目录下所有文件(注意备份重要数据) - 重启容器:
docker compose up -d
4. 检查容器内环境变量加载情况
通过以下命令确认容器内数据库参数是否正确:
docker exec -it <directus-container-name> printenv | grep DB_
替换<directus-container-name>为你的容器名称(可通过docker ps查看),检查输出的DB_PASSWORD、DB_HOST等参数是否与预期一致。
5. 确认加密选项配置正确性
Azure SQL强制要求加密连接,确保DB_OPTIONS__ENCRYPT设置为布尔值true(不带引号),字符串形式的"true"会导致驱动无法正确识别加密要求,引发登录失败。
内容的提问来源于stack exchange,提问作者Vernon Joyce
相关产品推荐
相关产品推荐

