在 slim python 3.6 docker 映像上运行 python mysql 客户端
Posted
技术标签:
【中文标题】在 slim python 3.6 docker 映像上运行 python mysql 客户端【英文标题】:Run python mysql client on slim python 3.6 docker image 【发布时间】:2020-01-26 09:11:46 【问题描述】:我有一个在 python:3.6-jessie 图像上运行的工作服务。 我正在尝试减小它的大小以加快无服务器冷启动。
我尝试了 python:3.6-alpine、python:3.6-slim-buster 和 python:3.6-slim-jessie 的图像。
对于所有这些,我最终不得不安装许多额外的软件包,并且我最终会遇到以下错误,我无法使用更多的软件包来修复:
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory
我当前的 Dockerfile 是
FROM python:3.6-jessie as build
ENV PYTHONUNBUFFERED 0
ENV FLASK_APP "api/app.py"
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
WORKDIR /opt/venv
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
FROM python:3.6-slim-jessie
COPY --from=build /opt/venv /opt/venv
WORKDIR /opt/venv
RUN apt-get update
RUN apt-get --assume-yes install gcc
RUN apt-get --assume-yes install python-mysqldb
ENV PATH="/opt/venv/bin:$PATH"
RUN rm -rf configs tests draw_results env .idea .git .pytest_cache
EXPOSE 8000
CMD ["/opt/venv/run.sh"]
requirements.txt 中的相关行:
mysqlclient==1.4.2.post1
PyMySQL==0.9.3
Flask-SQLAlchemy==2.3.2
SQLAlchemy==1.3.0
run.sh 只是我的 gunicorn 启动命令。
是否有任何软件包可以用来解决最后一个问题,是否有其他我应该使用的 mysql 库或其他方式来解决这个问题。或者当我想要一个 mysql 客户端时,我应该坚持使用完整的 python:3.6 图像吗?
【问题讨论】:
【参考方案1】:我正在使用python:3.7-slim
并使用以下命令
RUN apt-get -y install default-libmysqlclient-dev
【讨论】:
python:3.8-slim 首先需要apt-get update
。然后安装将起作用。
这个答案对我有帮助。我想在由python:3.9-slim
构建的容器中将mysqlclient
与我的应用程序一起使用。但是,我收到有关各种依赖项的错误。将default-libmysqlclient-dev
包添加到容器构建解决了这些依赖关系。
确保“所有”有帮助的答案都得到支持,以感谢您的努力。
你可能是对的。我想提一下我需要这个解决方案的具体情况,以防它帮助有同样问题的其他人也找到这个解决方案。【参考方案2】:
尝试将此行添加到dockerfile:
RUN apt-get install -y libmysqlclient-dev
【讨论】:
这成功了!谢谢!我已经尝试过了,但后来使用了 python:3.6-slim-buster 图像,但没有奏效。 我很高兴它成功了。我经常忘记安装*-dev
包
得到错误:包'libmysqlclient-dev'没有安装候选。使用 python:3.6 图片以上是关于在 slim python 3.6 docker 映像上运行 python mysql 客户端的主要内容,如果未能解决你的问题,请参考以下文章
sh 如何在Ubuntu 16.04 LTS - Docker中安装Python 3.6。*