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

Docker容器内Python脚本连接本地SQL Express登录失败求助

Docker容器连接本地SQL Server Express登录失败问题解决

问题详情

运行Docker容器时遇到登录失败错误:

C:\Users\----\Proyectos_Python\Proyectos_de_Prueba\PythonSQL>docker run -it --name cont_pysql --network host -p 1433:1433 pysql
WARNING: Published ports are discarded when using host network mode
Traceback (most recent call last):
  File "/app/pythonSQL.py", line 42, in <module>
    baseinput = pyodbc.connect(conn_str_in)
pyodbc.InterfaceError: ('28000', "[28000] [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Login failed for user 'sri***'. (18456) (SQLDriverConnect)")

使用的Python连接代码:

import pyodbc
import pandas as pd
pyodbc.pooling = False
server = '192.***.**.**,1433' #Ethernet Ethernet adapter in ipconfig/cmd
bdconsulta = 'pruebas_seba'
tablaconsulta = 'dbo.tpruebas1'
bddestino = 'pruebas_seba2'
tabladestino = 'tpruebas2'
user='srive***'
password='******'
driver = '{ODBC Driver 18 for SQL Server}'
conn_str_in = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={server};DATABASE={bdconsulta};UID={user};PWD={password};TrustServerCertificate=yes'
baseinput = pyodbc.connect(conn_str_in)

本地Visual Studio Code中使用SRIV****\SQLEXPRESS(Windows身份验证)执行脚本正常,但Docker容器中使用本地IP+SQL身份验证时抛出登录失败异常。

解决步骤

1. 启用SQL Server身份验证模式

  • 打开SQL Server Management Studio(SSMS),连接到SQLEXPRESS实例
  • 右键实例 → 属性 → 安全性,选择「SQL Server和Windows身份验证模式」
  • 重启SQL Server服务(在服务列表中找到SQL Server (SQLEXPRESS),右键重启)

2. 验证SQL登录账号状态与权限

  • 在SSMS中展开「安全性」→「登录名」,找到srive***账号
  • 右键账号 → 属性 → 状态,确保「登录」选项设置为「启用」
  • 切换到「用户映射」标签,勾选目标数据库pruebas_seba,并赋予必要权限(如db_datareader、db_datawriter)

3. 调整Docker网络与连接字符串

  • Windows系统下Docker的--network host模式兼容性有限,建议改用端口映射模式启动容器:
    docker run -it --name cont_pysql -p 1433:1433 pysql
    
  • 修改Python代码中的server地址为Docker内置主机域名(自动指向宿主机):
    server = 'host.docker.internal,1433'
    

4. 确认SQL Server端口监听设置

  • 打开SQL Server配置管理器,展开「SQL Server网络配置」→「SQLEXPRESS的协议」,确保TCP/IP已启用
  • 双击TCP/IP → IP地址,拉到最下方的IPAll区域,确认TCP端口为1433
  • 重启SQL Server服务使设置生效

5. 检查Windows防火墙规则

  • 打开Windows Defender防火墙,添加入站规则允许1433端口的TCP连接
  • 或者直接将SQL Server (SQLEXPRESS)服务添加到防火墙允许列表中

内容的提问来源于stack exchange,提问作者SEBASTIAN . RIVEROS PARDO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:11:01