AttributeError:/usr/lib/libgdal.so.1:未定义符号:OGR_F_GetFieldAsInteger64在Docker中安装时

时间:2019-12-12 17:13:26

标签: c++ django postgresql docker gdal

在使用postgres db在docker上安装GeoDjango时出错。

我是docker的新手,我正在docker上设置项目。我不知道,这是关于django或postgres的错误。

发现此错误

  

AttributeError:/usr/lib/libgdal.so.1:未定义的符号:   在Docker中安装时OGR_F_GetFieldAsInteger64

docker-compose.yml

    #POSSIBLE FIX FOR FASTCGI IMPLEMENTATIONS
    #RewriteRule .* index.php [PT,QSA,L] 
</IfModule>

网络/ Dockerfile

version: '3'
services:
        postgres:
                restart: always
                image: postgres:alpine
                volumes:
                        - ./postgres_gis/gis_db:/home/dev/gis_db.sql
                environment:
                        POSTGRES_USER: postgres
                        POSTGRES_PASSWORD: Dev@mishra123
                        POSTGRES_DB: gis_db
                expose:
                        - "5432"
        web:
                build: ./HomePage
                restart: always
                expose:
                        - "8000"
                volumes:
                        - ./HomePage:/home/dev/app/HomePage
                depends_on:
                        - postgres
                environment:
                        - DEBUG=1

web / docker-entrypoint.sh

from python:3.6.2-slim
RUN groupadd dev && useradd -m -g dev -s /bin/bash dev
RUN echo "dev ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN mkdir -p /home/dev/app/HomePage
RUN chown -R dev:dev /home/dev/app
RUN chmod -R +x+r+w /home/dev/app
WORKDIR /home/dev/app/HomePage
RUN apt-get update && apt-get -y upgrade
COPY requirements.txt /home/dev/app/HomePage
RUN apt-get install -y python3-dev python3-pip
RUN apt-get install -y libpq-dev
RUN apt-get install -y binutils libproj-dev gdal-bin
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
USER dev
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

docker-compose ps

#!/bin/sh
python manage.py makemigrations
python manage.py migrate
python manage.py runserver 0.0.0.0:8000

1 个答案:

答案 0 :(得分:1)

您遇到的问题是您的GDAL版本太旧。您的Dockerfile建立在基于Debian Jessie的python:3.6.2-slim之上,并安装了gdal版本1.10.1OGR_F_GetFieldAsInteger64变量为introduced in v. 2.0.0

根据debian.org上的GDAL package page,您需要一个更新的Debian版本(拉伸,克星,靶心都可以使用)。因此,我建议您将Dockerfile更改为使用python:3.8.0-slim-buster或更高版本。请查看hub.docker.com python页面以获取更多信息

此外,如评论中所述,您的Dockerfile仅应具有CMDENTRYPOINT中的一个,而不能同时具有两者。由于您的entrypoint.sh会执行CMD的工作,并且更多,因此,我只需删除CMD并坚持使用ENTRYPOINT

披露:我为EnterpriseDB (EDB)工作

相关问题