You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Django+PostGIS项目启动失败:AttributeError报错求助

问题

Docker启动Django+PostGIS项目时抛出错误:

AttributeError: /usr/lib/libgdal.so.20: undefined symbol: OSRSetAxisMappingStrategy

已尝试更新所有依赖库但无效,使用的Docker配置如下:

FROM python:3.11-buster

# Set work directory
WORKDIR /app

# Install system dependencies
RUN apt-get update \
    && apt-get install -y \
        binutils \
        libproj-dev \
        gdal-bin \
        libgdal-dev \
        postgresql-client \
    && rm -rf /var/lib/apt/lists/* \

ENV CPLUS_INCLUDE_PATH=/usr/include/gdal
ENV C_INCLUDE_PATH=/usr/include/gdal

# Install Poetry
COPY pyproject.toml poetry.lock* ./
RUN pip install poetry && \
    poetry config virtualenvs.create false && \
    poetry install --no-dev

# Copy the application code
COPY . .

# Expose ports
EXPOSE 8000
EXPOSE 8001

# Run the application
ENTRYPOINT ["sh", "-c", "poetry run gunicorn app.wsgi:application --bind 0.0.0.0:8000"]

解决方案

1. 锁定GDAL/Proj版本匹配

该错误源于GDAL与Proj库版本不兼容,OSRSetAxisMappingStrategy是Proj 6+引入的符号,旧版GDAL可能依赖低版本Proj。可在安装时指定兼容的具体版本:
修改Dockerfile中系统依赖安装部分:

RUN apt-get update \
    && apt-get install -y \
        binutils \
        libproj15=6.3.1-1+b2 \
        gdal-bin=2.4.0+dfsg-1+b1 \
        libgdal20=2.4.0+dfsg-1+b1 \
        libgdal-dev=2.4.0+dfsg-1+b1 \
        postgresql-client \
    && rm -rf /var/lib/apt/lists/*

版本号需与buster源中可用版本匹配,可通过apt-cache show libgdal-dev在buster容器内查询对应版本。

2. 调整依赖安装顺序

修改系统依赖安装顺序,确保Proj先安装,避免版本冲突:

RUN apt-get update \
    && apt-get install -y \
        binutils \
        libproj-dev \
        postgresql-client \
    && apt-get install -y \
        gdal-bin \
        libgdal-dev \
    && rm -rf /var/lib/apt/lists/*

3. 更换预配置GIS基础镜像

若buster源的GDAL/Proj存在兼容性问题,可使用已预配置兼容环境的GIS镜像作为基础,比如geodata/gdal:3.0-python3:

FROM geodata/gdal:3.0-python3

# Set work directory
WORKDIR /app

# Install Poetry
COPY pyproject.toml poetry.lock* ./
RUN pip install poetry && \
    poetry config virtualenvs.create false && \
    poetry install --no-dev

# Copy the application code
COPY . .

# Expose ports
EXPOSE 8000
EXPOSE 8001

# Run the application
ENTRYPOINT ["sh", "-c", "poetry run gunicorn app.wsgi:application --bind 0.0.0.0:8000"]

4. 对齐Python依赖与系统GDAL版本

检查pyproject.toml中的GDAL依赖版本,确保与系统安装的GDAL版本一致。例如系统安装GDAL 2.4,则Python依赖指定对应版本:

[tool.poetry.dependencies]
gdal = "~2.4.0"

内容的提问来源于stack exchange,提问作者NIKITOS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:50:01