如何修改Azure DevOps服务容器中Postgres的timezone配置
在Azure DevOps流水线中配置Postgres服务容器的Timezone参数
我有一个使用Postgres作为服务容器的Azure DevOps流水线定义:
resources: containers: - container: 'postgres' image: 'postgres:14' ports: - 5432:5432 env: - POSTGRES_USER: '....' - POSTGRES_PASSWORD: '....' - POSTGRES_DB: '.....' stages: - stage: 'test' jobs: - job: 'test' services: postgres: postgres pool: vmImage: 'ubuntu-latest' steps: ....
需要修改该镜像运行的postgres可执行文件的timezone配置选项,尝试过两种方法但均失败:
- 在
resources.containers.container下使用options设置:该值会被放在docker create命令的镜像标签之前,Docker无法识别-c timezone=utc这类postgres参数,执行报错。 - 使用
Docker@2步骤手动启动容器:timezone参数被注入到docker start命令中,但报错“unknown flag: --timezone”,因为docker start不支持为容器的ENTRYPOINT/CMD提供参数。
可行解决方案
方案1:通过环境变量POSTGRES_INITDB_ARGS配置
Postgres Docker镜像支持通过POSTGRES_INITDB_ARGS环境变量传递初始化参数,其中包含时区配置:
resources: containers: - container: 'postgres' image: 'postgres:14' ports: - 5432:5432 env: - POSTGRES_USER: '....' - POSTGRES_PASSWORD: '....' - POSTGRES_DB: '.....' - POSTGRES_INITDB_ARGS: "--timezone=UTC"
该变量会在数据库初始化阶段生效,后续postgres服务运行时会沿用这个时区配置。
方案2:通过command字段指定postgres启动参数
直接覆盖容器的默认启动命令,添加postgres的-c timezone=UTC参数:
resources: containers: - container: 'postgres' image: 'postgres:14' ports: - 5432:5432 env: - POSTGRES_USER: '....' - POSTGRES_PASSWORD: '....' - POSTGRES_DB: '.....' command: ["postgres", "-c", "timezone=UTC"]
Azure DevOps在创建容器时会使用该命令启动postgres,参数会被正确传递给postgres可执行文件。
内容的提问来源于stack exchange,提问作者Antti Keskinen
相关产品推荐
相关产品推荐

