我正在尝试从在Ubuntu计算机上运行的Alpine Docker映像访问网络上另一台计算机上运行的SQL Server数据库。到目前为止,我可以从Ubuntu计算机上访问数据库,但是无法从容器内部连接到数据库。通过在network_mode: host
文件中设置docker-compose.yml
,可以ping SQL Server数据库,但是仍然无法使用isql
,tsql
或Python模块连接到该数据库。 pyodbc
。
我可以使用tsql
从主机和容器中查找数据库,但是不能从容器中连接数据库。
# works fine from host and container
tsql -H apex-data.apex.local -L
# only works from host
tsql -S apex-data -p 1433 -U condor
# or alternatively with /etc/odbc.ini
isql APEXDSN
这是我的Dockerfile
:
FROM python:3.6-alpine3.7
ENV PYTHONUNBUFFERED 1
# update apk repo
RUN echo "http://dl-4.alpinelinux.org/alpine/v3.7/main" >> /etc/apk/repositories && \
echo "http://dl-4.alpinelinux.org/alpine/v3.7/community" >> /etc/apk/repositories
RUN apk update && apk upgrade && \
apk add unixodbc unixodbc-dev && \
apk add freetds && \
apk add build-base
WORKDIR /usr/src/project
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY odbc.ini /etc/odbc.ini
COPY odbcinst.ini /etc/odbcinst.ini
COPY project ./
我的docker-compose.yml
如下:
version: '3.2'
services:
app:
build: .
container_name: "nf-app"
command: python3 app.py
volumes:
- ./project:/usr/src/project
ports:
- "3001:3001"
- "1433:1433"
network_mode: host
这是odbcinst.ini
文件:
[FreeTDS]
Description = TD Driver (MSSQL)
Driver = /usr/lib/libtdsodbc.so.0
[ODBC]
Trace = Yes
ForceTrace = Yes
TraceFile = /usr/src/project/logs/odbc.log