从docker容器连接到本地sql服务器

问题描述 投票:0回答:1

我尝试以下方法来完成: 使用 docker 映像连接到 Windows 计算机上的 loacl sql 服务器。 我面临的问题是没有成功连接,我在不同配置下遇到的主要错误是:

sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

我尝试过:

  • 不同的司机
  • 检查在端口 1433(sql server 配置管理器)上启用了 tcp 协议+允许远程连接
  • 不同的docker镜像
  • 不同的连接字符串

设置:

  • pyodbc + sqlalchemy 与引擎符号
  • fastAPI 后端与 uvicorn
SQLALCHEMY_DATABASE_URL = (
    "mssql+pyodbc://user_name:[email protected]:1433/db_name"
    "?driver=ODBC+Driver+17+for+SQL+Server"
)

engine = create_engine(
    SQLALCHEMY_DATABASE_URL,
    echo=True,

)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Docker 文件: Odbc 安装驱动程序来自: 微软驱动安装

# 
FROM python:3.11.1

# 
WORKDIR /code

# 
COPY ./requirements.txt /code/requirements.txt

RUN curl https://packages.microsoft.com/keys/microsoft.asc > /etc/apt/trusted.gpg.d/microsoft.asc

#Download appropriate package for the OS version
#Choose only ONE of the following, corresponding to your OS version


#Debian 11
RUN curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list


RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
# optional: for bcp and sqlcmd
#RUN ACCEPT_EULA=Y apt-get install -y mssql-tools
#RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
#RUN source ~/.bashrc
# optional: for unixODBC development headers
RUN apt-get install -y unixodbc-dev
# optional: kerberos library for debian-slim distributions
RUN apt-get install -y libgssapi-krb5-2


# 
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt



# 
COPY ./app /code/app

# 
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "5001"]

docker 构建成功,我运行它:

docker run -d --name container_name -p 1433:1433 dockerhub_name/image_name:latest

容器运行了几秒钟,然后说:

sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

我认为这是一个网络问题,但无法解决问题:S 我试图遵循的主要提示也是: 七月份的问题

@J.C. 的回答。格拉斯

docker sqlalchemy fastapi pyodbc
1个回答
0
投票

使用“host.docker.internal”而不是本地主机解决了我的问题

© www.soinside.com 2019 - 2024. All rights reserved.