Docker SQL Server与MongoDB创建外部表报错求助
解决PolyBase连接MongoDB的"无效位置URI"错误
问题诊断
从你提供的错误信息和配置来看,问题主要来自两个方面:
- SQL语句语法错误:你的
ALTER EXTERNAL DATA SOURCE语句存在单引号冗余和语法格式错误,导致URI解析失败。 - 容器网络地址错误:你使用了Docker网关地址
172.18.0.1,但SQL Server容器和MongoDB容器处于同一个自定义网络oms_dev_setup_default中,应该直接使用MongoDB容器的内部IP或别名。
解决方案
1. 修正外部数据源配置语句
首先修复语法错误,并将LOCATION指向正确的MongoDB容器地址:
选项A:使用MongoDB容器内部IP
ALTER EXTERNAL DATA SOURCE MongoDBSource SET LOCATION = 'mongodb://172.18.0.4:27017', CREDENTIAL = MongoDBConnection, CONNECTION_OPTIONS = 'ssl=false;';
选项B:使用Docker容器别名(推荐)
容器重启后IP可能变化,用别名更稳定:
ALTER EXTERNAL DATA SOURCE MongoDBSource SET LOCATION = 'mongodb://mongodb:27017', CREDENTIAL = MongoDBConnection, CONNECTION_OPTIONS = 'ssl=false;';
语法修正点说明:
- 移除了LOCATION值末尾多余的单引号
- 调整参数换行与逗号位置,确保符合SQL语法规范
- 注释需移至语句外,避免干扰语法解析
2. 验证容器间网络连通性
进入SQL Server容器内部,测试与MongoDB的连通性:
# 进入SQL Server容器(替换为你的容器名/ID) docker exec -it <sql-server-container-name> bash # ping MongoDB容器别名或IP,确认网络可达 ping mongodb ping 172.18.0.4
如果ping不通,通过docker network inspect oms_dev_setup_default确认两个容器是否在同一网络中。
3. 检查MongoDB的连接配置
确保MongoDB允许SQL Server容器的连接:
- 配置文件中
bindIp设为0.0.0.0(允许所有IP连接),或添加SQL Server容器的IP - 若MongoDB启用认证,确认
MongoDBConnection凭证的用户名、密码正确,且该用户拥有目标数据库的读取权限
内容的提问来源于stack exchange,提问作者DanielRamiz
相关产品推荐
相关产品推荐

