エラー概要
dockerビルド中に以下のエラーに遭遇。
使用したイメージはpython:3.6-slim-busterイメージ
です。
...(省略)
install --record /tmp/pip-record-89kpydwp/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.6m/uWSGI Check the logs for full command output.
failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c pip install -r requirements.txt]: exit code: 1
原因
uwsgi
パッケージのインストール中にエラーが発生しているよう。
このパッケージはC言語で書かれた部分があり、そのコンパイルにはPythonの開発ヘッダーファイルやコンパイラなどの追加の依存関係が必要とのこと。
python:3.6-slim-buster
イメージは、(サイズを小さく保つために)これらの依存関係が含まれていないようですね。普通にpython:3.6
ならこのエラーは出ませんでした。
対処法
以下のようにインストールしてあげることでエラーがなくなりました。
FROM python:3.6-slim-buster
RUN apt-get update && apt-get install -y \
build-essential \
python3-dev \
libpcre3 \
libpcre3-dev \
これでuwsgi
のインストール時に必要なコンパイル環境が整うようになりました。
-
build-essential
: Debianベースのシステム(Ubuntuなど)でソフトウェアをビルドするために必要なツールパッケージ -
python3-dev
: PythonのC拡張をコンパイルするために必要なパッケージ
ちなみにuWSGIとは、PythonでWebサービスを動かすためのアプリケーションサーバのこと(対応言語はPythonだけではない)。
こんなイメージですね。
HTTP client ↔ Nginx ↔ uWSGI ↔ Python app
引用元:https://en.wikipedia.org/wiki/UWSGI
WSGIプロトコルを実装している、PythonアプリケーションとWebサーバー間の標準的なインターフェースです。WSGIについては以前こんな記事も書いたのでご参考までに。
Pythonを含む複数のプログラミング言語をサポートするWebサーバーであり、アプリケーションサーバーです。uWSGIは、WebアプリケーションとWebサーバー間の通信を管理するために使用され、特にPythonのWebアプリケーションでよく使用されます。uWSGI自体は、WSGI(Web Server Gateway Interface)プロトコルを実装しており、PythonアプリケーションとWebサーバー間の標準的なインターフェースを提供します。