7

我正在尝试使用ansible-container. 我知道 Citus 提供容器,但我想构建自己的容器。

我的container.yaml样子如下:

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并成功完成。但是,当我随后运行容器时,出现以下错误:

$ 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时,我看到以下过程:

postgres    14  1.6  0.1 307504  3480 ?        Ds   16:46   0:00 postgres: 9.6/master: startup process

我也试过没有dumb-init入口点。我错过了什么?

4

2 回答 2

6

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

pg_ctlcluster 9.6 master stop -- -m smart

与默认的“快速”方法相比,“智能”方法在关闭之前等待活动客户端断开连接并完成在线备份。这在pg_ctl的文档中有解释。

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

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']
于 2017-02-23T12:43:09.937 回答
1

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

su - postgres -c 'pg_ctl start -D /var/lib/postgresql/data -l /var/lib/postgresql/log.log -m smart'
于 2019-02-06T23:40:43.160 回答