web-dev-qa-db-ja.com

エラー:psykerp2をDockerのAlpineにインストールすると、pg_config実行可能ファイルが見つかりません

DockerでPostgresを使用してFlaskアプリを構築しようとしています。 PostgresのAWS RDSインスタンスに接続したいのですが、FlaskアプリにはDockerを使用します。ただし、psycopg2をセットアップしようとすると、pg_configが見つからないため、エラーが発生します。エラーは次のとおりです。

Building api
Step 1/5 : FROM python:3.6.3-Alpine3.6
 ---> 84c98ca3b5c5
Step 2/5 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 407c158f5ee4
Step 3/5 : COPY . .
 ---> 966df18d329e
Step 4/5 : RUN pip install -r requirements.txt
 ---> Running in 284cc97aeb63
Collecting aniso8601==1.3.0 (from -r requirements.txt (line 1))
  Downloading aniso8601-1.3.0.tar.gz (57kB)
Collecting click==6.7 (from -r requirements.txt (line 2))
  Downloading click-6.7-py2.py3-none-any.whl (71kB)
Collecting Flask==0.12.2 (from -r requirements.txt (line 3))
  Downloading Flask-0.12.2-py2.py3-none-any.whl (83kB)
Collecting Flask-RESTful==0.3.6 (from -r requirements.txt (line 4))
  Downloading Flask_RESTful-0.3.6-py2.py3-none-any.whl
Collecting Flask-SQLAlchemy==2.3.2 (from -r requirements.txt (line 5))
  Downloading Flask_SQLAlchemy-2.3.2-py2.py3-none-any.whl
Collecting itsdangerous==0.24 (from -r requirements.txt (line 6))
  Downloading itsdangerous-0.24.tar.gz (46kB)
Collecting Jinja2==2.9.6 (from -r requirements.txt (line 7))
  Downloading Jinja2-2.9.6-py2.py3-none-any.whl (340kB)
Collecting MarkupSafe==1.0 (from -r requirements.txt (line 8))
  Downloading MarkupSafe-1.0.tar.gz
Collecting psycopg2==2.7.3.1 (from -r requirements.txt (line 9))
  Downloading psycopg2-2.7.3.1.tar.gz (425kB)
    Complete output from command python setup.py Egg_info:
    running Egg_info
    creating pip-Egg-info/psycopg2.Egg-info
    writing pip-Egg-info/psycopg2.Egg-info/PKG-INFO
    writing dependency_links to pip-Egg-info/psycopg2.Egg-info/dependency_links.txt
    writing top-level names to pip-Egg-info/psycopg2.Egg-info/top_level.txt
    writing manifest file 'pip-Egg-info/psycopg2.Egg-info/SOURCES.txt'
    Error: pg_config executable not found.

    Please add the directory containing pg_config to the PATH
    or specify the full executable path with the option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

    ----------------------------------------
Command "python setup.py Egg_info" failed with error code 1 in /tmp/pip-build-01lf5grh/psycopg2/
ERROR: Service 'api' failed to build: The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1

これが私のDockerfileです:

FROM python:3.6.3-Alpine3.6

WORKDIR /usr/src/app

COPY . .

RUN pip install -r requirements.txt

CMD ["python", "app.py"]

他の多くはローカルで同様の問題を抱えているように見えますが、Dockerを使用することは関係ありません。ローカル仮想環境をセットアップでき、Postgresをローカルにインストールし、ローカルpg_configを見つけることができます。

コンテナのビルド/セットアップ中に、Dockerはコンテナ内でpg_configを見つけようとしているようです。 Postgresのコンテナ化されたインスタンスを使用せず、RDS上のインスタンスを使用する場合でも、pg_configをコンテナにインストールする方法はありますか?

これを回避する方法についてのあらゆる提案を歓迎します。ありがとう!

30
hidace

Python 3.4.8、3.5.5、3.6.5、および2.7.14でテスト済み(3を2に置き換えてください):

# You can use a specific version too, like python:3.6.5-Alpine3.7
FROM python:3-Alpine

WORKDIR /usr/src/app

COPY requirements.txt .

RUN \
 apk add --no-cache postgresql-libs && \
 apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev && \
 python3 -m pip install -r requirements.txt --no-cache-dir && \
 apk --purge del .build-deps

COPY . .

CMD ["python3", "app.py"]

説明:Psycopgをビルドするには、パッケージgcc musl-dev postgresql-devが必要です。次に、そのpg_config実行可能ファイルも必要になります。postgresql-devをインストールするだけで機能しますが、postgresql-libsも正常に機能し、スペースが12 MB少なくなります。


ここに答えの元のバージョンがあります( this Dockerfile に基づきます)純粋なAlpineイメージに手動でPythonをインストールします。その時点でPythonはDockerイメージをPython 3.6およびAlpine 3.7。そのようにPython 2.7をインストールする場合は、apk add py2-pip(古いAlpineリポジトリではpy-pipと呼ばれる)も実行します。

FROM Alpine:3.7

WORKDIR /usr/src/app

COPY requirements.txt .

RUN \
 apk add --no-cache python3 postgresql-libs && \
 apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev postgresql-dev && \
 python3 -m pip install -r requirements.txt --no-cache-dir && \
 apk --purge del .build-deps

COPY . .

CMD ["python3", "app.py"]
52
Norrius

あなたが試すことができます:

pip install psycopg2-binary
3
Vivin Veerali