我使用以下 Dockerfile,它可以很好地構建到影像中:
FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONPATH="$PYTHONPATH:/app"
WORKDIR /app
COPY ./app .
RUN apt-get update
RUN apt-get install -y python3-pymssql python3-requests
CMD ["python3", "main.py"]
主要.py:
from pymssql import connect, InterfaceError, OperationalError
try:
conn = connect(host, username, password, database)
except (InterfaceError, OperationalError) as e:
raise
conn.close()
出于某種原因,python3-pymssql即使我在 docker 構建程序中看到它們被安裝,已安裝的庫也不存在,當我執行 a 時,docker run我收到以下錯誤:
Traceback (most recent call last):
File "main.py", line 1, in <module>
from pymssql import connect, InterfaceError, OperationalError
ModuleNotFoundError: No module named 'pymssql'
我想我可以使用 apip3 install但我更喜歡利用預構建apt包。你能告訴我我錯過了什么嗎?
謝謝您的幫助。
uj5u.com熱心網友回復:
您安裝了 Python 的兩個副本,3.8 和 3.7:
root@367f37546ae7:/# python3 --version
Python 3.8.12
root@367f37546ae7:/# python3.7 --version
Python 3.7.3
您所基于的映像python:3.8-slim-buster基于 Debian Buster,它在其軟體包中使用 Python 3.7。因此,如果您安裝 apt 軟體包,則將安裝 Python 3.7 并安裝適用于 Python 3.7 的軟體包。然后,您啟動缺少 pymssql 依賴項的 Python 3.8。
你可以:
- 使用非 Python 鏡像,并使用 apt 安裝 Python。這樣,您可以保證安裝的 Python 版本將與 apt 中的 Python 依賴項兼容。例如,您可以基于
FROM debian:buster. - 使用 Python 映像,并使用 pip 安裝您的依賴項。
uj5u.com熱心網友回復:
您只能使用 pip 安裝 pymssql。以下 Dockerfile 構建并運行良好:
FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1
RUN pip install pymssql
WORKDIR /app
COPY ./app .
CMD ["python3", "main.py"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383901.html
上一篇:添加8.8.8.8DNS條目后,Docker映像停止決議host.docker.internal
下一篇:Docker在AWSECS中運行
