Docker容器中连接MSSQL数据库失败问题求助
Docker容器连接MSSQL失败的排查与解决
1. 先查网络连通性
- 进入容器内部,测试能否ping通MSSQL服务器的IP地址:
# 替换成你的容器ID或名称 docker exec -it connect bash # 替换成MSSQL服务器的实际IP ping 192.168.1.100 - 如果ping不通:
- 若MSSQL在本地主机,Docker默认bridge网络下别用
localhost或127.0.0.1,改用host.docker.internal;或者在docker-compose里添加network_mode: host直接使用主机网络 - 若MSSQL在远程服务器,确认服务器防火墙开放了1433端口(SQL Server默认端口)
- 若MSSQL在本地主机,Docker默认bridge网络下别用
2. 核对连接参数
- Host格式要正确:
- 命名实例的格式是
IP地址\实例名,比如192.168.1.100\SQLEXPRESS,同时要确保SQL Browser服务在运行(命名实例依赖它定位) - 优先用IP地址,别用主机名,避免DNS解析出错
- 命名实例的格式是
- 端口要明确:如果SQL Server未使用默认1433端口,采用
IP地址,端口号的格式(逗号分隔,不是冒号) - 账号权限要匹配:确认所用SQL账号有远程连接权限,密码、数据库名称拼写无误
3. 检查SQL Server的远程配置
- 打开SQL Server配置管理器,确保「SQL Server网络配置」下的TCP/IP协议已启用
- 查看TCP/IP属性的IPAll选项,确认TCP端口为你使用的端口,且防火墙未拦截该端口
- 在SSMS中右键服务器→属性→连接,勾选「允许远程连接到此服务器」
4. 调整Docker Compose配置
如果MSSQL在本地主机,修改docker-compose.yml:
version: '3.1' services: connect: image: sql build: ./ restart: always # 方案一:使用主机网络,直接共享主机网络栈 network_mode: host # 方案二:bridge网络下映射本地主机(二选一) # extra_hosts: # - "host.docker.internal:host-gateway"
同时确保Dockerfile安装了所有依赖:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "你的脚本文件名.py"]
对应的requirements.txt:
pymssql sqlalchemy pandas
5. 用最简代码测试
先排除业务代码干扰,用基础代码验证连接:
import pymssql try: conn = pymssql.connect( host='192.168.1.100\SQLEXPRESS', # 替换成你的实际host user='你的SQL账号', password='你的密码', database='目标数据库名' ) print("连接成功!") conn.close() except Exception as e: print(f"连接失败原因:{str(e)}")
内容的提问来源于stack exchange,提问作者easyfreeze
相关产品推荐
相关产品推荐

