首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerized PostgreSQL: psql: FATAL:数据库系统正在启动

Dockerized PostgreSQL: psql: FATAL:数据库系统正在启动
EN

Stack Overflow用户
提问于 2017-02-23 01:19:32
回答 2查看 15.1K关注 0票数 7

我正在尝试使用ansible-container构建和运行两个托管PostgreSQL和Citus扩展的Docker容器。我知道Citus提供了容器,但我想构建自己的容器。

我的container.yaml如下所示:

代码语言:javascript
复制
version: '2'

services:

  database_master:
    image: hackermd/ubuntu-trusty-python
    user: postgres
    expose:
      - 5043
    entrypoint: ['dumb-init', '--']
    command: ['/usr/bin/pg_ctlcluster', '9.6', 'master', 'start']
    links:
      - database_worker
    depends_on:
      - database_worker

  database_worker:
    image: hackermd/ubuntu-trusty-python
    user: postgres
    expose:
    - 9700
  entrypoint: ['dumb-init', '--']
  command: ['/usr/bin/pg_ctlcluster', '9.6', 'worker', 'start']

在构建过程中,我可以通过pg_ctlcluster启动和停止集群,它会成功完成。然而,当我随后运行容器时,我得到了以下错误:

代码语言:javascript
复制
$ docker logs ansible_database_master_1
Removed stale pid file.
Warning: connection to the database failed, disabling startup checks:
psql: FATAL:  the database system is starting up

当我使用command: []构建容器并在容器中运行ps aux时,我看到了以下过程:

代码语言:javascript
复制
postgres    14  1.6  0.1 307504  3480 ?        Ds   16:46   0:00 postgres: 9.6/master: startup process

我也尝试过不使用dumb-init入口点。我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-23 20:43:10

该问题与pg_ctl stop模式(pg_ctlpg_ctlcluster调用)的默认关闭方法有关。在构建过程中使用pg_ctl选项-m smart通过pg_ctlcluster停止集群可以解决此问题:

代码语言:javascript
复制
pg_ctlcluster 9.6 master stop -- -m smart

与默认的“快速”方法不同,“智能”方法会等待活动客户端断开连接并完成联机备份,然后才会关闭。这在pg_ctl的文档中有解释。

此外,一旦pg_ctlcontrol进程通过postgres (pg_ctlcontrol -> pg_ctl -> postgres)成功启动数据库集群,容器就会退出。为了防止这种情况,可以直接调用postgres。然后,container.yml文件将如下所示:

代码语言:javascript
复制
version: '2'

services:

  database_master:
    image: hackermd/ubuntu-trusty-python
    user: postgres
    expose:
      - 5043
    command: ['dumb-init', '/usr/lib/postgresql/9.6/bin/postgres', '-D', '/var/lib/postgresql/9.6/master']
    links:
      - database_worker
    depends_on:
      - database_worker

  database_worker:
    image: hackermd/ubuntu-trusty-python
    user: postgres
    expose:
      - 9700
    command: ['dumb-init', '/usr/lib/postgresql/9.6/bin/postgres', '-D', '/var/lib/postgresql/9.6/worker']
票数 6
EN

Stack Overflow用户

发布于 2019-02-07 07:40:43

我的问题是使用pg_ctl启动postgres,然后在我的docker容器中运行测试。修复方法是将“智能模式”添加到我的命令中,即:

代码语言:javascript
复制
su - postgres -c 'pg_ctl start -D /var/lib/postgresql/data -l /var/lib/postgresql/log.log -m smart'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42398199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档