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

如何通过Docker容器使用Sqoop将SQL Server数据导入HDFS?解决容器间连接失败问题

解决Sqoop连接同一Docker网络中SQL Server容器失败的问题

首先咱得戳破核心问题:你在Cloudera容器里用localhost:1433访问SQL Server容器是错的——每个Docker容器都有独立的网络栈,localhost在Cloudera容器里指向它自己,根本不是你的SQL Server容器。好在两个容器已经加入了同一个自定义网络nc-de-network,这时候直接用SQL Server容器的名称或hostname就能通信,不用绕弯子。

步骤1:修正Sqoop连接命令

把连接字符串里的localhost换成SQL Server容器的名称data-engr-sql-svr(或者你设置的hostname,两者在同一Docker网络里是等效的)。另外注意一个细节:你启动SQL Server时用的SA密码是mypassword,但Sqoop命令里写的是pwd,这俩得保持一致!

修正后的命令如下:

sudo -u hdfs sqoop list-databases \
--connect "jdbc:sqlserver://data-engr-sql-svr:1433;databaseName=AdventureWorks2019" \
--username sa \
--password mypassword

注:这里去掉了instanceName参数,因为你启动的是SQL Server默认实例,不需要额外指定;如果确实是命名实例,再加回去就行。

步骤2:验证容器间网络连通性

如果还是报错,先在Cloudera容器里测试网络通不通:

  1. 进入Cloudera容器:
docker exec -it cnt7-xxx-cdh63 bash
  1. 用telnet测试1433端口(没装telnet的话先跑yum install telnet -y):
telnet data-engr-sql-svr 1433

如果能成功连接,说明网络没问题,问题出在Sqoop配置或认证;如果连不上,检查两个容器是否真在同一个网络:

docker inspect data-engr-sql-svr | grep Networks
docker inspect cnt7-xxx-cdh63 | grep Networks

确保两者的nc-de-network都存在。

步骤3:确认SQL Server的TCP/IP配置

因为你本地笔记本能正常连SQL Server容器,说明宿主机端口映射没问题,但容器内的SQL Server是否开了TCP/IP?官方镜像默认是开启的,保险起见可以验证:

docker exec -it data-engr-sql-svr bash
/opt/mssql/bin/mssql-conf show network.tcp.enabled

返回1就是开启状态,不用管;返回0的话跑/opt/mssql/bin/mssql-conf set network.tcp.enabled 1再重启容器。

额外提醒

  • 先确认两个容器都在运行:docker ps看data-engr-sql-svr和cnt7-xxx-cdh63的状态都是Up
  • 如果SQL Server容器重启过,IP可能变,但用容器名访问不受影响(Docker内置DNS会自动解析)

内容的提问来源于stack exchange,提问作者jarvis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:52:31