eeacms/postgres这是一个支持复制功能且适用于ZODB RelStorage的PostgreSQL Docker镜像。该镜像具有通用性,可在非EEA相关项目中复用。
:latest Dockerfile - PostgreSQL:16:17s Dockerfile - PostgreSQL:17:16s Dockerfile - PostgreSQL:16:15s Dockerfile - PostgreSQL:15:14s Dockerfile - PostgreSQL:14:13s Dockerfile - PostgreSQL:13:12s Dockerfile - PostgreSQL:12:11s Dockerfile - PostgreSQL:11:10s Dockerfile - PostgreSQL:10:9.6s Dockerfile - PostgreSQL:9.6:9.5s Dockerfile - PostgreSQL:9.5查看旧版本
bash$ docker run --name=pg1 \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=postgres \ -e POSTGRES_DBNAME="datafs zasync" \ -e POSTGRES_DBUSER=zope \ -e POSTGRES_DBPASS=zope \ eeacms/postgres
或使用docker-compose:
yamlversion: "2" services: postgres: image: eeacms/postgres ports: - "5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DBNAME: "datafs zasync" POSTGRES_DBUSER: zope POSTGRES_DBPASS: zope volumes: - postgres-data:/var/lib/postgresql/data volumes: postgres-data:
启动主节点:
bash$ docker run --name=master \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=postgres \ -e POSTGRES_DBNAME="datafs zasync" \ -e POSTGRES_DBUSER=zope \ -e POSTGRES_DBPASS=zope \ -e POSTGRES_CONFIG_wal_level=hot_standby \ -e POSTGRES_CONFIG_max_wal_senders=8 \ -e POSTGRES_CONFIG_wal_keep_segments=8 \ -e POSTGRES_CONFIG_hot_standby=on \ eeacms/postgres
启动副本节点:
bash$ docker run --name=replica1 \ --link=master \ -e POSTGRES_REPLICATE_FROM=master \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=postgres \ -e POSTGRES_CONFIG_wal_level=hot_standby \ -e POSTGRES_CONFIG_max_wal_senders=8 \ -e POSTGRES_CONFIG_wal_keep_segments=8 \ -e POSTGRES_CONFIG_hot_standby=on \ eeacms/postgres
或使用docker-compose:
yamlversion: "2" services: master: image: postgres-dev environment: POSTGRES_USER: "postgres" POSTGRES_PASSWORD: "postgres" POSTGRES_DBNAME: "datafs zasync" POSTGRES_DBUSER: "zope" POSTGRES_DBPASS: "zope" POSTGRES_CONFIG_wal_level: "hot_standby" POSTGRES_CONFIG_max_wal_senders: "8" POSTGRES_CONFIG_wal_keep_segments: "8" POSTGRES_CONFIG_hot_standby: "on" volumes: - master-data:/var/lib/postgresql/data replica: image: postgres-dev depends_on: - master environment: POSTGRES_USER: "postgres" POSTGRES_PASSWORD: "postgres" POSTGRES_CONFIG_wal_level: "hot_standby" POSTGRES_CONFIG_max_wal_senders: "8" POSTGRES_CONFIG_wal_keep_segments: "8" POSTGRES_CONFIG_hot_standby: "on" POSTGRES_REPLICATE_FROM: "master" volumes: - replica-data:/var/lib/postgresql/data volumes: master-data: replica-data:
可通过修改环境变量自定义部署。详见下文支持的环境变量部分。
您可能需要恢复现有的PostgreSQL数据库到数据容器中。详见恢复现有数据库部分。
有多种方式可以存储Docker容器中运行的应用程序所使用的数据。建议您熟悉可用的选项。Docker文档是了解不同存储选项和变体的良好起点,此外还有许多博客和论坛帖子对此进行了讨论并提供了建议。
bash$ cd eea.docker.postgres $ docker-compose up -d $ docker exec -it eeadockerpostgres_postgres_1 \ gosu postgres /postgresql.restore/database-backup.sh datafs $ docker cp eeadockerpostgres_postgres_1:/postgresql.backup/datafs.gz .
警告: 切勿在生产环境直接执行此操作。这将删除您现有的数据库
bash$ cd eea.docker.postgres $ docker-compose up -d $ docker cp datafs.gz eeadockerpostgres_postgres_1:/postgresql.backup/ $ docker exec eeadockerpostgres_postgres_1 \ gosu postgres /postgresql.restore/database-restore.sh datafs
POSTGRES_USER:此可选环境变量与POSTGRES_PASSWORD一起使用,用于设置用户及其密码。该变量将创建具有超级用户权限的指定用户以及同名数据库。如果未指定,将使用默认用户postgres。POSTGRES_PASSWORD:建议使用此环境变量配置PostgreSQL镜像。它用于设置PostgreSQL超级用户密码。默认超级用户由POSTGRES_USER环境变量定义。默认值为postgres。POSTGRES_DBNAME:在PostgreSQL中创建多个数据库(空格分隔),并以POSTGRES_DBUSER为所有者。例如:POSTGRES_DBNAME=datafs zasync。POSTGRES_DBPARAMS:使用自定义选项创建POSTGRES_DBNAME,例如:POSTGRES_DBPARAMS="--lc-collate=C --template=template0 --lc-ctype=C"。有关可能的选项,请参见createdb --help。POSTGRES_DBUSER:POSTGRES_DBNAME的所有者。POSTGRES_DBPASS:POSTGRES_DBUSER的密码。POSTGRES_REPLICATE_FROM:启动指定主节点的PostgreSQL副本。POSTGRES_REPLICATION_NETWORK:限制仅在此网络上进行复制(例如:172.168.0.0/16)。POSTGRES_CONFIG:多行环境变量,用于提供额外或覆盖PostgreSQL配置。RECOVERY_CONFIG:多行环境变量,用于向recovery.conf添加条目。POSTGRES_CRONS:多行环境变量,用于定义维护定时任务(如夜间备份、清理归档WAL文件)。您还可以通过使用POSTGRES_CONFIG_前缀的环境变量覆盖PostgreSQL配置。例如:
POSTGRES_CONFIG_MAX_CONNECTIONS=200 POSTGRES_CONFIG_SHARED_BUFFERS=4GB
同样,您可以使用RECOVERY_CONFIG_环境变量配置recovery.conf。
有关支持的参数,请参见PostgreSQL文档。您还应查看调整PostgreSQL服务器。
通过使用POSTGRES_CRON_前缀的环境变量定义维护定时任务。例如,在凌晨3点备份datafs数据库:
POSTGRES_CRON_1=0 3 * * * postgres /postgresql.restore/database-backup.sh datafs
或在凌晨5点恢复Staging数据库:
POSTGRES_CRON_2=0 5 * * * postgres /postgresql.restore/database-restore.sh datafs
如果遇到类似FATAL: could not map anonymous shared memory: Cannot allocate memory的错误,请通过环境变量降低shared_buffers的值(默认值为2G):
POSTGRES_CONFIG_shared_buffers=512MB
另请参见:调整PostgreSQL服务器
原始代码的初始所有者为欧洲环境署(EEA)。保留所有权利。
原始代码是免费软件;您可以根据自由软件基金会发布的GNU通用公共许可证的条款(版本2或更高版本)重新分发和/或修改它。
欧洲环境署(欧盟)


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务