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

我正在尝试使用Docker构build一个使用Postgres的Flask应用程序。 我想连接到Postgres的AWS RDS实例,但使用Docker作为我的Flask应用程序。 但是,当试图设置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。 这看起来像一个Docker的问题,因为我可以设置一个本地虚拟环境,安装程序工作得很好,因为我本地安装了Postgres,并且能够find我的本地pg_config

看来在容器的构build/设置过程中,Docker正试图在容器中查找pg_config 。 有没有办法在容器中安装pg_config ,即使我不会使用Postgres的容器化实例,而是使用RDS上的实例?

任何和所有的build议,如何解决这个问题,欢迎。 谢谢!

为了得到它的工作,你需要临时安装python3-dev gcc musl-dev软件包,以及postgresql-dev ,其中包含psycopg2工作所需的文件。 postgresql-libs似乎也做得很好,占用了12 MB的空间,但仍然需要postgresql-dev来构build包。

由于从Alpine repos安装python3-dev将会依靠安装python3 ,所以我们不妨使用纯Alpine 3.7镜像并手动安装Python 3.6.3(查看软件包索引以查看当前可用的版本)。 下面的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"]