在 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 客户端的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.7 Docker 镜像

sh 如何在Ubuntu 16.04 LTS - Docker中安装Python 3.6。*

docker 镜像瘦身工具 docker-slim

docker 镜像瘦身工具 docker-slim

docker学习2-快速搭建centos7-python3.6环境

在 python docker 镜像上使用 GPU