【问题标题】:Create extension postgis error with docker. All libs installed使用 docker 创建扩展 postgis 错误。已安装所有库
【发布时间】:2022-01-19 17:00:04
【问题描述】:

在 postgresql 和 Docker 中创建扩展 postgis 时遇到问题。我已经阅读了很多帖子和教程,但我失败了:) 我正在研究 WSL:

# uname -a
Linux 6019b3c71dfc 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 GNU/Linux

# psql -U user -d database -h db
psql (11.14 (Debian 11.14-0+deb10u1), server 10.18)
Type "help" for help.

massifs=# CREATE EXTENSION postgis;
ERROR:  could not open extension control file "/usr/local/share/postgresql/extension/postgis.control": No such file or directory

所以,我找到了 postgis.control 文件:

#  find /usr -name postgis.control
/usr/share/postgresql/11/extension/postgis.control

并将其复制(并根据需要更改权限)到正确的文件夹中:cp /usr/share/postgresql/11/extension/postgis.control /usr/local/share/postgresql/extension

但是错误是一样的:(

我已经安装了所有需要的库:

# dpkg -l | grep postgis
ii  postgis                              2.5.1+dfsg-1                 amd64        Geographic objects support for PostgreSQL
ii  postgis-doc                          2.5.1+dfsg-1                 all          Geographic objects support for PostgreSQL -- documentation
ii  postgis-gui                          2.5.1+dfsg-1                 amd64        Geographic objects support for PostgreSQL -- GUI programs
ii  postgresql-11-postgis-2.5            2.5.1+dfsg-1                 amd64        Geographic objects support for PostgreSQL 11
ii  postgresql-11-postgis-2.5-scripts    2.5.1+dfsg-1                 all          Geographic objects support for PostgreSQL 11 -- SQL scripts

同样的错误:(

我的 docker-compose.yaml :

#./dj/docker-compose.yml
version: '3.7'

services:
  web:
    env_file:
      - ./env/django.env
    build:
         context: ./myproject
         dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - ./myproject:/opt/myproject
    ports:
      - "8050:8000"
    depends_on:
      - db
    restart: always

  db:
    env_file:
      - ./env/postgresql.env
    image: postgis/postgis
    #image: postgres:10-alpine
    container_name: postgres_container_myproject
    hostname: db
    volumes:
      - /var/lib/postgresql/data-myproject:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: always

  pgadmin:
    env_file:
      - ./env/pgadmin.env
    image: dpage/pgadmin4
    container_name: pgadmin_container_myproject
    ports:
      - "8059:80"
    volumes:
      - /var/lib/pgadmin/data:/var/lib/pgadmin/data
    links:
      - "db:pgsql-server"
    restart: always
    logging:
      driver: none

volumes:
  pgadmin_data:
  postgres_data:
    driver: local

请问你有什么想法吗?

【问题讨论】:

  • 你是如何建立你的形象的?你能告诉我们你的 Dockerfile 吗?您是否考虑过只使用existing postgis image

标签: postgresql docker postgis windows-subsystem-for-linux


【解决方案1】:

我一直在使用postgis/docker-postgis,如果您想了解他们的工作情况,Dockerfile 是个好地方

【讨论】:

  • 我没有掌握 Docker :)。所以,如果我理解的话,我会创建一个 postgis docker 映像,并将其链接到我的 docker-compose.yaml 文件中?,带有“db”部分?
  • 也许我错了:),“postgis”doskcer 图像替换了我在 docker-compose.yaml 中的“db”部分,因为这个图像有 postgres 和 postgis。对吧?
  • 是的,它是一个安装了 postgis 的 postgres 容器
  • 我更改了我的 docker-compose.ymal 但已有一个数据库。我尝试删除架构,但仍然出现错误:The data directory was initialized by PostgreSQL version 10, which is not compatible with this version 13.。我可以删除所有,因为项目正在开始。我也尝试删除文件夹“data”
  • 现在,它正在工作。只需重命名/var/lib/postgresql/{data}docker-compose down && docker-compose up --build。谢谢:)
【解决方案2】:

请注意,您正在连接到错误的服务器或有一个错误版本的服务器:

psql (11.14 (Debian 11.14-0+deb10u1), server 10.18)

报告 10 (10.18) 的服务器版本,该版本肯定未由软件包 postgresql-11-postgis-2.5 安装(即版本 11)。

我假设您正在连接到没有安装正确软件包的不同机器/容器(不是 localhost)。

【讨论】:

  • 命令行中的结果在我的 docker 容器中(使用“docker exec -it ... ...”运行)。所有的库都是用我的 Dockerfile 安装的,而不是手动安装的。
  • @fabrice 您似乎没有连接到 localhost,而是连接到名为 db -h db 的主机。试试-h localhost 看看有什么变化。
  • 主机“db”是数据库的docker主机。它在 docker-compose.yaml 文件中配置。
  • @fabrice 请在您的问题中发布docker-compose.yaml 文件。
  • 完成了。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-12-23
  • 2014-05-08
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 2013-10-09
  • 1970-01-01
相关资源
最近更新 更多