Rap*_*ael 4 postgresql docker coreos
我尝试使用Docker和bash脚本(我使用Coreos)设置PostgreSQL从站。我尚未找到任何有效的方法.pgpass。
我知道我可以创建PGPASSWORD环境变量,但是出于安全原因(如此处所述,http://www.postgresql.org/docs/current/static/libpq-envars.html),我不希望这样做,并且因为每次使用recovery.conf文件时(对于primary_conninfo变量),都应该可以访问此密码。
Docker文件
# ...
# apt-get installs and other config
# ...
USER postgres
# Create role and db
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER replicator WITH ENCRYPTED PASSWORD 'THEPASSWORD';" &&\
psql --command "CREATE DATABASE db WITH OWNER replicator;"
# Set the pg_pass to allow connection to master
ADD ./pgpass.conf /home/postgres/.pgpass # pgpass.conf comes my root git folder
USER root
RUN chmod 0600 /home/postgres/.pgpass
Run Code Online (Sandbox Code Playgroud)
在我的bash文件中
# ...
pg_basebackup -h host.of.master.ip -D /var/pgbackup/backup_data -U replicator -v -P
# ...
Run Code Online (Sandbox Code Playgroud)
问题似乎是未读取pgpass文件。似乎我应该使用我要模仿的用户的密码(https://serverfault.com/questions/526170/psql-fe-sendauth-no-password-supplied),但是在这种情况下,复制者角色自然是不是可用的bash用户。(请注意,既不能将pgpass复制到/ home / root,也不能将/ home / postgres复制)。
注意:我的pgpass文件和通过远程数据库conf
# pgpass.conf
host.of.master.ip:5432:replication:replicator:THEPASSWORD
host.of.master.ip:5432:*:replicator:THEPASSWORD
# pg_hba.conf
host replication replicator host.of.slave.ip/24 md5
Run Code Online (Sandbox Code Playgroud)
您必须.pgpass在将要运行命令的用户(在本例中为postgres)的主文件夹上创建一个。文件的每一行都必须采用格式 hostname:port:database:username:password并支持通配符,因此,例如,您可以将数据库设置为“ *”。
就我而言,我有这样的事情...
$ sudo echo "${PRIMARY_IP}:5432:*:${REPL_USER}:${REPL_PASS}" > /var/lib/postgresql/.pgpass
$ sudo chown postgres:postgres /var/lib/postgresql/.pgpass
$ sudo chmod 0600 /var/lib/postgresql/.pgpass
$ sudo -u postgres pg_basebackup -h $PRIMARY_IP -D /var/lib/postgresql/9.4/main -U ${REPL_USER} -v -P --xlog-method=stream
Run Code Online (Sandbox Code Playgroud)
这些变量(例如PRIMARY_IP)是在我使用以下命令运行docker容器时设置的 -e PRIMARY_IP=x.x.x.x
| 归档时间: |
|
| 查看次数: |
3502 次 |
| 最近记录: |