You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker SQL Server与MongoDB创建外部表报错求助

解决PolyBase连接MongoDB的"无效位置URI"错误

问题诊断

从你提供的错误信息和配置来看,问题主要来自两个方面:

  1. SQL语句语法错误:你的ALTER EXTERNAL DATA SOURCE语句存在单引号冗余和语法格式错误,导致URI解析失败。
  2. 容器网络地址错误:你使用了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:55:16