Docker设置与Python应用程序的Mysql容器

时间:2014-09-05 09:13:24

标签: python mysql docker

我有一个运行的容器" dockerfile / mysql"我可以连接到并与之交互。我正在尝试为将从mysql数据库读取的Python应用程序构建另一个映像。问题是Python应用程序需要MySQL-python并尝试在安装时安装它。因为这个容器不能容纳mysql服务器,所以我最终得到了;

Downloading/unpacking MySQL-python
Downloading MySQL-python-1.2.5.zip (108kB): 108kB downloaded
Running setup.py (path:/tmp/pip_build_vagrant/MySQL-python/setup.py) egg_info for package MySQL-python
sh: 1: mysql_config: not found
Traceback (most recent call last):
  File "<string>", line 17, in <module>
  File "/tmp/pip_build_vagrant/MySQL-python/setup.py", line 17, in <module>
    metadata, options = get_config()
  File "setup_posix.py", line 43, in get_config
    libs = mysql_config("libs_r")
  File "setup_posix.py", line 25, in mysql_config
    raise EnvironmentError("%s not found" % (mysql_config.path,))
EnvironmentError: mysql_config not found
Complete output from command python setup.py egg_info:
sh: 1: mysql_config: not found

这是完全可以理解的。

我应该如何设置我的Python应用程序容器(使用SQLAlchemy)从mysql容器中读取?

由于

3 个答案:

答案 0 :(得分:11)

apt-get install -y libmysqlclient-dev添加到您的Dockerfile

答案 1 :(得分:5)

如果您使用python:3.5-alpine,则可以通过在mysqlclient中添加以下代码来安装Dockerfile

RUN set -e; \
        apk add --no-cache --virtual .build-deps \
                gcc \
                libc-dev \
                linux-headers \
                mariadb-dev \
                python3-dev \
                postgresql-dev \
        ;

整个Dockerfile将是这样的:

# Version: 0.0.1
FROM python:3.5-alpine
ENV PYTHONUNBUFFERED 1
RUN set -e; \
        apk add --no-cache --virtual .build-deps \
                gcc \
                libc-dev \
                linux-headers \
                mariadb-dev \
                python3-dev \
                postgresql-dev \
        ;
RUN mkdir /djcode
WORKDIR /djcode
ENV REFRESHED_AT 2017-12-25
ADD requirements.txt /djcode/
RUN pip install --no-cache-dir -r /djcode/requirements.txt
RUN pip install uwsgi
ADD . /djcode/
EXPOSE 6001

答案 2 :(得分:1)

为避免映像大小不成比例地增加(额外300MB),可以在构建mysqlclient之后从映像中删除软件包。 因此,您可以执行以下操作:

  1. 在您的dockerfile中添加以下行:

    COPY ./apk_deps.sh ./apk_deps.sh
    RUN ./apk_deps.sh
    
  2. 使用以下几行创建apk_deps.sh文件:

    #! /bin/sh
    set -e
    echo "apk add --no-cache --virtual .build-deps gcc libc-dev linux-headers mariadb-dev python3-dev"
    apk add --no-cache --virtual .build-deps gcc libc-dev linux-headers mariadb-dev python3-dev
    echo "pip install mysqlclient"
    pip install mysqlclient
    echo "apk del .build-deps"
    apk del .build-deps
    apk add --no-cache mariadb-client-libs
    

这样,我的图像大小仅增加了7MB。