错误:使用Docker时未找到pg_config可执行文件

问题描述:

我正尝试使用Docker使用Postgres来构建Flask应用程序。我想连接到Postgres的AWS RDS实例,但使用Docker作为我的Flask应用程序。但是,当试图设置psycopg2时,它会发生错误,因为它找不到pg_config。这里的错误:错误:使用Docker时未找到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。有没有办法在容器中安装pg_config,即使我不会使用Postgres的容器化实例,而是使用RDS上的实例?

欢迎任何关于如何解决此问题的建议。谢谢!

+0

的[PG \ _config可执行文件未找到(https://*.com/questions/11618898/pg-config-executable-not-found) –

+0

这些例子可能重复似乎都涉及本地设置,但不是专门在没有安装Postgres的Docker容器中。 – hidace

+0

Alpine有一个答案(请参阅Dockerfile的第一行):https://*.com/a/44938314/3929826您应该能够抽象出Docker的答案。 –

要正常工作,您需要need临时安装的软件包python3-dev gcc musl-dev以及postgresql-dev,它具有psycopg2所需的文件。 postgresql-libs似乎也做得很好,占用了12 MB的空间,但postgresql-dev仍然需要构建包。

因为从高山回购安装python3-dev将依赖安装python3,我们不妨来一个纯粹的高山3.7图像并手动安装Python 3.6.3(检查package index看什么版本目前)。下面Dockerfile为我工作:

FROM alpine:3.7 

WORKDIR /usr/src/app 

COPY requirements.txt . 

RUN apk update && \ 
apk add python3 postgresql-libs && \ 
apk add --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"]