我正在try 读取Python 3.11应用程序中的本地. accdb文件,但失败了,该应用程序运行在python:3.11-alpine
容器中.
我的Dockerfile执行时没有错误:
FROM python:3.11-alpine
EXPOSE 5001
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
RUN apk update && apk add --no-cache gcc g++ musl-dev unixodbc-dev flex bison gawk
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
RUN apk add --no-cache git autoconf automake libtool gettext-dev make
RUN git clone https://github.com/mdbtools/mdbtools.git
WORKDIR /mdbtools
RUN autoreconf -i -f
RUN ./configure --with-unixodbc=/usr --disable-dependency-tracking
RUN make
RUN make install
RUN echo -e "\n[MDBTools]\nDescription=MDBTools Driver\nDriver=/usr/local/lib/odbc/libmdbodbc.so" >> /etc/odbcinst.ini
RUN apk add --no-cache nano
WORKDIR /app
COPY . /app
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
CMD ["python", "server.py"]
我的Python脚本(accdb_test.py
):
import pyodbc
import argparse
parser = argparse.ArgumentParser(description='Connect to an Access database.')
parser.add_argument('db_path', type=str, help='The path to the Access database')
args = parser.parse_args()
conn_str = (
r'DRIVER={MDBTools};'
r'DBQ=' + args.db_path + ';'
)
try:
conn = pyodbc.connect(conn_str)
print("Connection successful!")
except pyodbc.Error as e:
print("Failed to connect to the database:", e)
我构建了一个连接到它的终端的容器,然后运行脚本,结果如下:
/app $ python accdb_test.py /app/input_examples/caesar/MODEL_13-16_R01.ACCDB
['MDBTools']
File not found
File not found
Unable to locate database
Failed to connect to the database: ('HY000', 'The driver did not supply an error!')
.accdb
文件的路径正确,我判断了:
/app $ ls -l /app/input_examples/caesar/MODEL_13-16_R01.ACCDB
-rwxrwxrwx 1 appuser root 47116288 Mar 18 09:29 /app/input_examples/caesar/MODEL_13-16_R01.ACCDB