docker-postgis 是一个运行 PostGIS 的轻量 Docker 容器。你可以在 Docker Hub 上访问其页面:[***]。
与其他 PostGIS Docker 容器相比,本容器的特点包括:
gis 的数据库,可直接与 QGIS 等工具配合使用镜像标签遵循以下格式:
kartoza/postgis:[postgres_major_version]-[postgis-point-releases]
例如:
kartoza/postgis:13.0 包含 PostgreSQL 13.0 和 PostGIS 3.0。
注意:强烈建议使用带标签的版本。PostgreSQL 的不同小版本会将数据库集群文件存储在不同目录中,若使用持久化卷存储数据,使用非标签版本可能导致数据库“为空”的问题。
通过以下命令拉取指定版本的镜像(首次拉取流量较大):
shelldocker pull kartoza/postgis:image_version
shelldocker build -t kartoza/postgis git://github.com/kartoza/docker-postgis
shellgit clone git://github.com/kartoza/docker-postgis git checkout branch_name # 可选,如不指定则使用默认分支
shelldocker build -t kartoza/postgis .
通过构建参数指定 PostgreSQL 和 PostGIS 版本:
shelldocker build \ --build-arg POSTGRES_MAJOR_VERSION=13 \ --build-arg POSTGIS_MAJOR=3 \ -t kartoza/postgis:13-3 .
可通过构建参数指定基础镜像(需基于 Debian 并包含 PostgreSQL *** apt 源):
DISTRO:发行版(默认 debian)IMAGE_VERSION:版本(默认 buster)IMAGE_VARIANT:变体(默认 slim)例如构建基于 Ubuntu 20.04 的镜像:
.env 文件:
dotenvDISTRO=ubuntu IMAGE_VERSION=focal IMAGE_VARIANT=""
shell./build.sh
默认构建会包含所有 locales,可通过 GENERATE_ALL_LOCALE=0 仅保留默认 locale 以加快构建:
shelldocker build --build-arg GENERATE_ALL_LOCALE=0 -t kartoza/postgis .
DATADIR:数据库集群存储路径(默认 /var/lib/postgresql/{major-version})。如需持久化,建议挂载父目录(如 -v data-volume:/var/lib/postgresql)。DEFAULT_ENCODING:集群编码(如 UTF8)DEFAULT_COLLATION:排序规则(如 en_US.UTF-8)DEFAULT_CTYPE:字符分类(如 en_US.UTF-8)WAL_SEGSIZE:WAL 段大小PASSWORD_AUTHENTICATION:认证方式(如 md5)INITDB_EXTRA_ARGS:initdb 命令的额外参数RECREATE_DATADIR=TRUE 会删除现有 DATADIR 并重建(重建后需移除该参数,否则每次重启都会重建)。默认集群编码为 UTF8,排序规则和字符分类为 C.UTF-8。如需自定义,初始化时传入以下环境变量:
shell-e DEFAULT_ENCODING="UTF8" \ -e DEFAULT_COLLATION="en_US.UTF-8" \ -e DEFAULT_CTYPE="en_US.UTF-8"
POSTGRES_USER:数据库用户名(默认 docker)POSTGRES_PASS:用户密码(默认 docker,建议使用强密码)POSTGRES_DBNAME:默认数据库名(可指定多个,用逗号分隔,如 gis,data)POSTGRES_MULTIPLE_EXTENSIONS:启用的扩展(如 postgis,hstore,postgis_raster)SHARED_PRELOAD_LIBRARIES:预加载扩展(如 pg_cron)SSL_CERT_FILE/SSL_KEY_FILE/SSL_CA_FILE:SSL 证书路径(自定义证书时使用)SCHEMA_NAME:创建的模式名(可指定多个,逗号分隔),默认仅在第一个数据库中创建ALL_DATABASES=TRUE:在所有数据库中创建指定模式ARCHIVE_MODE:是否启用 WAL 归档(默认 off,设为 on 则启用)ARCHIVE_COMMAND:归档命令(默认 test ! -f /opt/archivedir/%f && cp %p /opt/archivedir/%f)WAL_LEVEL:WAL 级别(默认 replica,逻辑复制需设为 logical)WAL_SIZE:WAL 最大大小(默认 4GB)ALLOW_IP_RANGE:允许连接的 IP 范围(默认 0.0.0.0/0,即所有 IP)IP_LIST:PostgreSQL 监听的 IP(默认 *,即所有接口)通过 EXTRA_CONF 添加自定义 postgresql.conf 配置(用 \n 分隔多行):
shell-e EXTRA_CONF="log_destination = 'stderr'\nlogging_collector = on"
为避免敏感信息通过环境变量传递,可在变量名后添加 _FILE 从文件读取值(如 Docker Secrets)。支持的变量包括:
POSTGRES_PASS_FILE、POSTGRES_USER_FILE、POSTGRES_DB_FILE、SSL_CERT_FILE_FILE 等。
shelldocker run --name "postgis" -p 25432:5432 -d -t kartoza/postgis
注意:若未指定
POSTGRES_PASS,会生成随机密码,可通过容器日志或/tmp/PGPASSWORD.txt文件查看。
项目提供 docker-compose.yml,包含数据库和备份服务(基于 docker-pg-backup),默认暴露端口 25432:
shelldocker-compose up -d # 启动服务(数据存储在 Docker 卷中,非本地磁盘)
shellsudo apt-get install postgresql-client-12
shellpsql -h localhost -U docker -p 25432 -l
将 .sql、.sql.gz 或 .sh 文件挂载到 /docker-entrypoint-initdb.d 目录,容器启动时会自动执行。默认仅在首次启动时执行,若需每次启动执行,设置 IGNORE_INIT_HOOK_LOCKFILE=TRUE。
示例:
shelldocker run -d -v `pwd`/setup.sql:/docker-entrypoint-initdb.d/setup.sql kartoza/postgis
设置 FORCE_SSL=TRUE 强制客户端使用 SSL 连接:
shelldocker run -e FORCE_SSL=TRUE -p 25432:5432 -d kartoza/postgis
挂载证书文件并指定路径:
shelldocker run -p 25432:5432 \ -e FORCE_SSL=TRUE \ -e SSL_CERT_FILE=/ssl/fullchain.pem \ -e SSL_KEY_FILE=/ssl/privkey.pem \ -e SSL_CA_FILE=/ssl/root.crt \ -v /path/to/certs:/ssl \ -d kartoza/postgis
支持主从复制,主库和从库通过环境变量配置:
REPLICATION=TRUE:启用复制REPLICATION_USER:复制用户名(默认 replicator)REPLICATION_PASS:复制用户密码(默认 replicator,建议自定义)ALLOW_IP_RANGE:允许从库 IP 连接REPLICATE_FROM:主库地址(IP 或域名)REPLICATE_PORT:主库端口(默认 5432)DESTROY_DATABASE_ON_RESTART:重启时是否重建数据(默认 TRUE)PROMOTE_MASTER=TRUE:将从库提升为主库(提升后需重新配置复制)设置 WAL_LEVEL=logical 启用逻辑复制,具体配置可参考示例 sample/logical_replication/docker-compose.yml。
ALTER DEFAULT PRIVILEGES IN SCHEMA data GRANT SELECT ON TABLES TO replicator;)。sslmode(如自签名证书使用 sslmode=require,CA 签名证书可使用 verify-full)。来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429