簡體   English   中英

Docker 為 Python 應用程序設置 Mysql 容器

[英]Docker Setup with a Mysql Container for a Python App

我有一個運行“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 容器中讀取?

謝謝

apt-get install -y libmysqlclient-devDockerfile

如果你使用python:3.5-alpine ,你可以通過在Dockerfile添加以下代碼來安裝mysqlclient

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

為避免圖像大小不成比例地增加(額外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。

如果您嘗試在 alpine linux 上設置 mysql,則此問題的正確解決方案是使用此命令添加mariadb-connector-c package

apk update && apk add mariadb-connector-c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM