![](/img/trans.png)
[英]App Engine Flexible Environment - Dockerfile installing outdated version of GDAL
[英]App Engine Flexible - Docker file fails to install GDAL
我正在嘗試將 Django 應用程序部署到 App Engine 柔性環境。 我的 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.
這是我的 dockerfile:
FROM ubuntu:bionic
RUN apt-get update && apt-get install -y \
binutils \
gdal-bin \
python3-gdal \
ibgdal-dev \
libproj-dev
# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
# Use -p python3 or -p python3.7 to select python version. Default is version 2.
RUN virtualenv /env -p python3.7
# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
RUN pip install -r requirements.txt
# Add the application source code.
ADD . /
# Run a WSGI server to serve the application. gunicorn must be declared as
# a dependency in requirements.txt.
CMD gunicorn -b :$PORT main:app
這是我的 app.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
我知道我在問一個非常相似的問題,在這里得到回答,但提問者自己的解決方案似乎沒有用。
對我來說,好像您缺少正確的gdal
安裝。 確實安裝起來有點棘手,但在ubuntu
(也有docker
)上,我通常有從ubuntugis安裝它的良好經驗。
這是一個例子:
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/*
...
我認為問題出在Docker
文件中。 你有以下內容:
...
RUN apt-get update && apt-get install -y \
binutils \
gdal-bin \
python3-gdal \
ibgdal-dev \
libproj-dev
....
而且我認為 lib 的名稱是libgdal-dev
而不是ibgdal-dev
我會贊同 Val 的回答,使用“ubuntugis”PPA 並提供更新的 GDAL 等庫。 至少那對我有用。 我應該補充一點,我離開了基本的 GAE flex 圖像(基於 Ubuntu 16.04 LTS xenial),以便 GAE 的健康檢查按預期工作。 它們也很難調試。
您還需要在您的app.yaml
中使用 GAE 的 custom/flex 環境(假設您的項目名為“my-app”,因此請檢查wsgi.py
所在的位置):
runtime: custom
env: flex
entrypoint: gunicorn -b :$PORT my-app.wsgi
runtime_config:
python_version: 3
試試這個 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 中這樣做。
Python 3.7 帶有 GAE 基本映像,但如果您想要 go 用於 3.8,請參閱此處的 Dockerfile 描述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.