使用docker compose启动postgres并设置时区
设置PostGres时区
- 方法 1: 使用 `POSTGRES_INITDB_ARGS` 设置时区
- 方法 2: 使用初始化脚本设置时区
- 创建 `init-user-db.sql`
- 更新 `docker-compose.yml`
- 启动服务
要在启动 PostgreSQL 数据库时设置时区,可以通过在 docker-compose.yml
文件中添加环境变量或通过配置文件来实现。对于 PostgreSQL,你可以使用 POSTGRES_INITDB_ARGS
环境变量来传递初始化数据库时的参数,包括时区设置。
方法 1: 使用 POSTGRES_INITDB_ARGS
设置时区
可以在 docker-compose.yml
文件中的 environment
部分添加 POSTGRES_INITDB_ARGS
环境变量,并指定时区选项。例如,如果想设置时区为 Asia/Shanghai
,可以这样做:
version: '3.9'
services:
dbpg16:
image: 192.168.1.111:5000/crm/postgres:16.5
container_name: pg_db_16
restart: always
ports:
- "25432:5432"
- "22779:22"
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=odoo
- POSTGRES_USER=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
- POSTGRES_INITDB_ARGS=--timezone='Asia/Shanghai' # 设置时区
volumes:
- ./odoo-db-data:/var/lib/postgresql/data/pgdata
- ./etc/pgbackrest:/etc/pgbackrest
volumes:
odoo-db-data:
方法 2: 使用初始化脚本设置时区
如果需要更复杂的初始化操作,或者想要确保每次启动容器时都应用某些设置,可以使用一个初始化 SQL 脚本来设置时区。首先创建一个 SQL 文件(例如 init-user-db.sql
),然后将其挂载到容器中。
创建 init-user-db.sql
在你的项目目录下创建一个名为 init-user-db.sql
的文件,并添加以下内容:
-- 设置时区
SET timezone = 'Asia/Shanghai';
更新 docker-compose.yml
修改 docker-compose.yml
文件以包含该初始化脚本:
version: '3.9'
services:
dbpg16:
image: 192.168.1.111:5000/crm/postgres:16.5
container_name: pg_db_16
restart: always
ports:
- "25432:5432"
- "22779:22"
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=odoo
- POSTGRES_USER=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- ./odoo-db-data:/var/lib/postgresql/data/pgdata
- ./etc/pgbackrest:/etc/pgbackrest
- ./init-user-db.sql:/docker-entrypoint-initdb.d/init-user-db.sql # 挂载初始化脚本
volumes:
odoo-db-data:
启动服务
完成上述更改后,运行以下命令来启动服务:
docker-compose up -d
这将根据你的配置启动 PostgreSQL 容器,并根据所选的方法之一设置时区。