Я пытаюсь получить доступ к базе данных SQL Server, работающей на другом компьютере в сети, из образа Alpine Docker, работающего на компьютере с Ubuntu.Пока что я могу получить доступ к базе данных с компьютера с Ubuntu, но не могу подключиться к ней из контейнера.Установив network_mode: host
внутри моего docker-compose.yml
файла, я могу пропинговать базу данных 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