[英]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-dev
到Dockerfile
。
如果你使用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后從映像中刪除包。 所以你可以這樣做:
在您的dockerfile中添加以下行:
COPY ./apk_deps.sh ./apk_deps.sh RUN ./apk_deps.sh
使用以下行創建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.