mdh*_*mdh 4 postgresql ansible docker docker-compose ansible-container
我正在尝试使用构建并运行两个托管PostgreSQL和Citus扩展的Docker容器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']
Run Code Online (Sandbox Code Playgroud)
在构建过程中,我可以通过启动和停止集群,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
Run Code Online (Sandbox Code Playgroud)
使用容器构建容器command: []并ps aux在容器中运行时,会看到以下过程:
postgres 14 1.6 0.1 307504 3480 ? Ds 16:46 0:00 postgres: 9.6/master: startup process
Run Code Online (Sandbox Code Playgroud)
我也尝试过没有dumb-init入口点。我想念什么?
问题与该pg_ctl stop模式的默认关闭方法(pg_ctl由调用pg_ctlcluster)有关。在构建过程中pg_ctlcluster使用pg_ctl选项停止集群可以-m smart解决此问题:
pg_ctlcluster 9.6 master stop -- -m smart
Run Code Online (Sandbox Code Playgroud)
与默认的“快速”方法相比,“智能”方法等待活动的客户端断开连接并完成在线备份,然后再关闭。pg_ctl的文档对此进行了解释。
另外,一旦pg_ctlcontrol进程通过postgres(pg_ctlcontrol-> pg_ctl-> postgres)成功启动数据库集群,容器将退出。为防止这种情况,postgres可以直接调用。该container.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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7642 次 |
| 最近记录: |