如何在Docker Python镜像中安装GDAL库?

6

我正在使用python3.7-slim-buster docker镜像开发我的django项目。现在我想要使用django的地理特性。但是看起来我需要安装GDAL。所以我运行了apt-get install gdal,然后它抛出了异常"E: Unable to locate package gdal-bin"。

以下是我的docker文件:


FROM python:3.7-slim-buster

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# DB vars
ENV DB_USER_NAME ${DB_USER_NAME}
ENV DB_NAME ${DB_NAME}
ENV DB_HOST ${DB_HOST}
ENV DB_PORT ${DB_PORT}
ENV DB_PASSWORD ${DB_PASSWORD}

ENV DJANGO_SECRET_KEY ${DJANGO_SECRET_KEY}

RUN apt-get install -y gdal-bin python-gdal python3-gdal

RUN ["adduser", "${USER_NAME}", "--disabled-password", "--ingroup", "www-data", "--quiet"]

USER ${USER_NAME}

ADD ${PROJECT_NAME}/ /home/${USER_NAME}/${PROJECT_NAME}
WORKDIR /home/${USER_NAME}/${PROJECT_NAME}

ENV PATH="/home/${USER_NAME}/.local/bin:\${PATH}:/usr/local/python3/bin"

RUN pip install --user -r requirements.txt

CMD python manage.py runserver 0.0.0.0:9000
#CMD gunicorn ${PROJECT_NAME}.wsgi:application --bind 0.0.0.0:8000
EXPOSE 8000

在安装gdal之前尝试调用apt-get update - 404pio
1
谢谢你的回答,但是我已经尝试过了,它没有起作用。 - Alihaydar Gubatov
3个回答

5
如果您可以使用其他基础镜像,这里有一个已安装gdal的镜像:

FROM osgeo/gdal:ubuntu-small-3.2.0


5
您需要执行以下操作:
RUN apt-get update
RUN apt-get install -y software-properties-common && apt-get update
RUN apt-get install -y python3.7-dev
RUN  add-apt-repository ppa:ubuntugis/ppa &&  apt-get update
RUN apt-get install -y gdal-bin libgdal-dev
ARG CPLUS_INCLUDE_PATH=/usr/include/gdal
ARG C_INCLUDE_PATH=/usr/include/gdal
RUN pip install GDAL

它会提示“add-apt-repository命令未找到”,并且无法找到python3.7-dev软件包。你有没有注意到我的基础镜像是python3.7-slim-buster?我认为这个命令是针对Ubuntu的。但是我想使用一些轻量级的东西,这样我的部署就不会花费太多时间。 - Alihaydar Gubatov
apt-get install -y software-properties-common 安装完成后,请确保在进行其他操作之前运行 apt-get update 进行更新。 - LinPy
那是什么意思? - LinPy
我不知道,错误日志在链接中。我无法从中获得任何见解。 - Alihaydar Gubatov
1
这意味着你应该安装gpg,但这与你最初的问题无关...... - LinPy

0

这是因为您的镜像中没有包含gdal-bin软件包的存储库。因此,您需要添加存储库(您可以在这里看到指南)并安装它:

RUN add-apt-repository ppa:ubuntugis/ppa && apt-get update && apt-get install -y gdal-bin python-gdal python3-gdal

是的,我知道我需要添加存储库。但是您提供的命令在此镜像中不存在作为命令。它会引发“找不到add-apt-repository命令”的错误。 - Alihaydar Gubatov
1
你有没有注意到我的基础镜像是python3.7-slim-buster?我认为这个命令是针对Ubuntu的。但是我想使用一些轻量级的东西,这样我的部署就不会花费太多时间。 - Alihaydar Gubatov
所以我认为你应该从源代码构建它,使图像尽可能轻。你可以在这里看看他们是如何做的 https://github.com/perrygeo/docker-gdal-base - Toan Quoc Ho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接