在轻量级的Python 3.6 Docker镜像上运行Python MySQL客户端

9

我有一个在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镜像?

3个回答

22
我使用的是python:3.7-slim镜像,并运行以下命令: RUN apt-get -y install default-libmysqlclient-dev

5
Python 3.8-slim 需要先执行 apt-get update,然后安装才能成功。 - Jari Turkia
这个答案帮助了我。我想在从python:3.9-slim构建的容器中使用mysqlclient来运行我的应用程序。然而,我收到了关于各种依赖项的错误。将default-libmysqlclient-dev软件包添加到容器构建中解决了这些依赖项。 - Mr. Lance E Sloan
请确保“所有”有帮助的答案都得到点赞以表彰其努力。 - ssi-anik
你可能是对的。我想提及我需要这个解决方案的具体情况,以便帮助其他遇到同样问题的人找到这个解决方案。 - Mr. Lance E Sloan
1
@SandeepaKariyawasam 很抱歉,我不是一个擅长Python的人。当我写下答案时,我正在使用Python。但是后来没有继续进行Python项目。无法给你确切的帮助。对不起。 - ssi-anik
显示剩余2条评论

3

尝试将此行添加到dockerfile中:

RUN apt-get install -y libmysqlclient-dev

这个可行!谢谢!我之前已经尝试过了,但是使用的是python:3.6-slim-buster镜像,结果不行。 - Stian
很高兴它能够工作。我经常忘记安装*-dev包。 - Evhz
2
出现错误:软件包“libmysqlclient-dev”没有安装候选项。 使用 python:3.6 镜像。 - skabbit

1

对于使用 Python slim-buster(Debian 操作系统)的用户,可以在 Dockerfile 上运行此命令。

RUN apt-get update && apt-get install -y default-mysql-client

这对我有用。 我使用的是python:3.10.6-slim-buster


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接