应用程序引擎灵活-Docker文件无法安装GDAL

应用程序引擎灵活-Docker文件无法安装GDAL,docker,google-app-engine,dockerfile,gdal,Docker,Google App Engine,Dockerfile,Gdal,我正在尝试将Django应用程序部署到AppEngine灵活的环境中。我的dockerfile无法安装GDAL 这是我在运行gcloud app deploy时收到的错误消息: File "/env/lib/python3.7/site-packages/django/contrib/gis/gdal/libgdal.py", line 42, in <module> % '", "'.join(lib_names) django.core.exceptions.Impr

我正在尝试将Django应用程序部署到AppEngine灵活的环境中。我的dockerfile无法安装GDAL

这是我在运行
gcloud app deploy
时收到的错误消息:

  File "/env/lib/python3.7/site-packages/django/contrib/gis/gdal/libgdal.py", line 42, in <module>
    % '", "'.join(lib_names)
django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal", "GDAL", "gdal2.4.0", "gdal2.3.0", "gdal2.2.0", "gdal2.1.0", "gdal2.0.0"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.
[2020-04-24 16:12:26 +0000] [8] [INFO] Worker exiting (pid: 8)
[2020-04-24 16:12:26 +0000] [1] [INFO] Shutting down: Master
[2020-04-24 16:12:26 +0000] [1] [INFO] Reason: Worker failed to boot.
这是我的应用程序。yaml:

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  # You can also specify 2 for Python 2.7
  python_version: 3.7

我知道我问了一个与被回答的问题非常相似的问题,但提问者自己的解决方案似乎不起作用

我认为问题出在
Docker
文件中。您具有以下功能:

...
RUN apt-get update && apt-get install -y \
  binutils \
  gdal-bin \
  python3-gdal \
  ibgdal-dev \
  libproj-dev
....

我认为lib的名称不是
ibgdal-dev

对我来说,似乎您缺少了一个正确的
gdal
安装。的确,安装起来有点棘手,但在
ubuntu
(也有
docker
)上,我通常有很好的安装经验

下面是一个例子:

FROM ubuntu:bionic

RUN apt-get update && apt-get install -y \
    software-properties-common \
    python3 \
    python3-dev \
    python3-pip \
  && rm -rf /var/lib/apt/lists/*

RUN add-apt-repository ppa:ubuntugis/ppa

RUN apt-get update && apt-get install -y \
    gdal-bin=2.4.2+dfsg-1~bionic0 \
    python3-gdal \
  && rm -rf /var/lib/apt/lists/*

RUN apt-get update && apt-get install -y libpq-dev \
  && rm -rf /var/lib/apt/lists/*
...

我支持Val的回答,使用“ubuntugis”PPA,并提供更新的GDAL等库。至少这对我起了作用。我应该补充一点,我脱离了基本的GAE flex映像(基于Ubuntu16.04 LTS xenial),这样GAE的健康检查就可以按预期工作了。它们也很难调试

您还需要在
app.yaml
中使用GAE的定制/flex环境(假设您的项目名为“我的应用程序”,请检查
wsgi.py
的位置):

尝试一下此Dockerfile:

FROM gcr.io/google-appengine/python
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive

RUN apt -y update && apt -y upgrade\
    && apt-get install -y software-properties-common \
    && add-apt-repository -y ppa:ubuntugis/ppa \
    && apt -y update && apt -y upgrade\
    && apt-get -y install \
    gdal-bin \
    libgdal-dev \
    python3-gdal  \ 
    && apt-get autoremove -y \
    && apt-get autoclean -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN virtualenv /env -p python3.7
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN python3 -m pip install -r /app/requirements.txt 
ADD . /app/
WORKDIR /app
CMD gunicorn -b :$PORT my-app.wsgi
请注意,您在上面的一条评论中提到要将
requirements.txt
添加到容器中,但实际上您并没有在Dockerfile中这样做


Python3.7附带了GAE基本映像,但是如果您想使用3.8,请参阅Dockerfile Descripte

仍然失败,不幸的是,同样的错误。非常感谢您的检查!很久以前,我有一个类似的问题,但与另一个图书馆。我所做的是创建并使用
start.sh
作为
Docker文件的
ENTRYPOINT
。非常感谢这一点-很高兴知道Ubuntu有一个GIS版本。不幸的是,在使用Dockerfile条目时,我仍然会遇到相同的错误。appengine似乎没有运行一些RUN命令,特别是那些试图安装软件包的命令。我一辈子都搞不懂为什么。@Jamie2483它不是ubuntu的GIS版本。。。而是一些主动维护的GIS相关软件,可以从那里下载,而不是标准的回购。例如,GDAL,默认情况下安装它将导致失败。你试过ubuntugis吗?你也会犯同样的错误吗?
runtime: custom
env: flex
entrypoint: gunicorn -b :$PORT my-app.wsgi

runtime_config:
    python_version: 3
FROM gcr.io/google-appengine/python
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive

RUN apt -y update && apt -y upgrade\
    && apt-get install -y software-properties-common \
    && add-apt-repository -y ppa:ubuntugis/ppa \
    && apt -y update && apt -y upgrade\
    && apt-get -y install \
    gdal-bin \
    libgdal-dev \
    python3-gdal  \ 
    && apt-get autoremove -y \
    && apt-get autoclean -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN virtualenv /env -p python3.7
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

ADD requirements.txt /app/requirements.txt
RUN python3 -m pip install -r /app/requirements.txt 
ADD . /app/
WORKDIR /app
CMD gunicorn -b :$PORT my-app.wsgi