I followed this document while configuring patroni and I have a problem with patroni.service file like this
https://snapshooter.com/learn/postgresql/postgresql-cluster-patroni
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target
[Service]
Type=simple
User=postgres
Group=postgres
ExecStart=/usr/local/bin/patroni /etc/patroni.yml
KillMode=process
TimeoutSec=30
Restart=no
[Install]
WantedBy=multi-user.targ
Here is my patroni.yml
scope: postgres
namespace: /db/
name: etcd1
restapi:
listen: 10.102.196.138:8008
connect_address: 10.102.196.138:8008
etcd:
hosts: 10.102.196.138:2379,10.102.196.139:2379,10.102.196.147:2379
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
initdb:
- encoding: UTF8
- data-checksums
pg_hba:
- host replication all 127.0.0.1/32 md5
- host replication all 10.102.196.138/0 md5
- host replication all 10.102.196.139/0 md5
- host all all 0.0.0.0/0 md5
users:
admin:
password: admin
options:
- createrole
- createdb
postgresql:
listen: 10.102.196.138:5432
connect_address: 10.102.196.138:5432
data_dir: /data/patroni
pgpass: /tmp/pgpass
authentication:
replication:
username: replicator
password: password
superuser:
username: postgres
password: password
parameters:
unix_socket_directories: '.'
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
And I got this error:
[root@localhost ~]# sudo systemctl status patroni -l
● patroni.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2021-05-24 23:24:26 +07; 7s ago
Process: 3307 ExecStart=/usr/local/bin/patroni /etc/patroni.yml (code=exited, status=1/FAILURE)
Main PID: 3307 (code=exited, status=1/FAILURE)
May 24 23:24:26 localhost.localdomain patroni[3307]: self.current_event = self.state()
May 24 23:24:26 localhost.localdomain patroni[3307]: File "/usr/local/lib64/python3.6/site-packages/yaml/parser.py", line 439, in parse_block_mapping_key
May 24 23:24:26 localhost.localdomain patroni[3307]: "expected <block end>, but found %r" % token.id, token.start_mark)
May 24 23:24:26 localhost.localdomain patroni[3307]: yaml.parser.ParserError: while parsing a block mapping
May 24 23:24:26 localhost.localdomain patroni[3307]: in "/etc/patroni.yml", line 1, column 1
May 24 23:24:26 localhost.localdomain patroni[3307]: expected <block end>, but found '<block mapping start>'
May 24 23:24:26 localhost.localdomain patroni[3307]: in "/etc/patroni.yml", line 38, column 2
May 24 23:24:26 localhost.localdomain systemd[1]: patroni.service: main process exited, code=exited, status=1/FAILURE
May 24 23:24:26 localhost.localdomain systemd[1]: Unit patroni.service entered failed state.
May 24 23:24:26 localhost.localdomain systemd[1]: patroni.service failed.
The YAML you provided does not generate an error if the spaces there are indeed spaces. So check your YAML for Tab or other hidden characters.
import ruamel.yaml
yaml_str = """
version: '2'
services:
ubuntupgcsstateless:
image: ubuntupgstatelesscsimage
environment:
- EXTERNAL_IP=10.31.86.164
- EXTERNALDB_IP=10.31.86.165
- EXTERNALDB_ADMIN_USER=postgres
- EXTERNALDB_ADMIN_PASSWORD=password
- DOCBASENAME=DocbaseName
hostname:
"ubuntupgcsstateless"
container_name:
"ubuntupgcsstateless"
ports:
- "1689:1689"
- "1690:1690"
- "50000:50000"
- "50001:50001"
- "9080:9080"
- "9082:9082"
volumes:
- DocbaseName_data:/home/dmadmin/dctm/data
- DocbaseName_dba:/home/dmadmin/dctm/dba
- DocbaseName_share:/home/dmadmin/dctm/share
- DocbaseName_dfc:/home/dmadmin/dctm/config
- DocbaseName_xhive_storage:/home/dmadmin/dctm/xhive_storage
- DocbaseName_mdserver:/home/dmadmin/dctm/wildfly9.0.1/server/DctmServer_MethodServer
privileged: true
volumes:
DocbaseName_data:
DocbaseName_dba:
DocbaseName_share:
DocbaseName_dfc:
DocbaseName_xhive_storage:
DocbaseName_mdserver:
"""
data = ruamel.yaml.round_trip_load(yaml_str)
print(ruamel.yaml.round_trip_dump(data))
Although not required by the YAML specification, you should consistently indent with the same number of spaces for keys in a mapping (you use 1 and 2 spaces, I recommend two) as well as elements in a sequence (again you use 1 and 2 spaces, I recommend using 0 for sequences that are mapping values).
Try the following with your Dockerfile
and docker-compose
:
version: '2'
services:
ubuntupgcsstateless:
image: ubuntupgstatelesscsimage
environment:
- EXTERNAL_IP=10.31.86.164
- EXTERNALDB_IP=10.31.86.165
- EXTERNALDB_ADMIN_USER=postgres
- EXTERNALDB_ADMIN_PASSWORD=password
- DOCBASENAME=DocbaseName
hostname:
"ubuntupgcsstateless"
container_name:
"ubuntupgcsstateless"
ports:
- "1689:1689"
- "1690:1690"
- "50000:50000"
- "50001:50001"
- "9080:9080"
- "9082:9082"
volumes:
- DocbaseName_data:/home/dmadmin/dctm/data
- DocbaseName_dba:/home/dmadmin/dctm/dba
- DocbaseName_share:/home/dmadmin/dctm/share
- DocbaseName_dfc:/home/dmadmin/dctm/config
- DocbaseName_xhive_storage:/home/dmadmin/dctm/xhive_storage
- DocbaseName_mdserver:/home/dmadmin/dctm/wildfly9.0.1/server/DctmServer_MethodServer
privileged: true
volumes:
DocbaseName_data:
DocbaseName_dba:
DocbaseName_share:
DocbaseName_dfc:
DocbaseName_xhive_storage:
DocbaseName_mdserver:
ERROR: yaml.parser.ParserError: while parsing a block mapping in "./docker-compose.yml", line 1, column 1
expected <block end>, but found '<block mapping start>' in "./docker-compose.yml", line 2, column 3
Кажется, в моем файле yml есть проблема с отступом. Я прочитал здесь несколько других вопросов и попробовал различные схемы отступов. Я все еще не могу заставить его работать. Я намеренно удалил имена env/pws перед публикацией этого вопроса.
version: '2'
ghost:
image: ghost:latest
container_name: ghost-blog #Specify a custom container name, rather than a generated default name.
environment:
- NODE_ENV=production
- MYSQL_DATABASE=db-name # Change {{db-name}}
- MYSQL_USER=user # Change {{username}}
- MYSQL_PASSWORD=pass # Change {{db-password}}
# - "MAILGUN_USER={{mailgun-user}}" # Change {{mailgun-user}}
# - "MAILGUN_PASSWORD={{mailgun-password}}" # Change {{mailgun-password}}
volumes:
- ./ghost:/var/lib/ghost # persist the data
ports:
- 2368:2368
depends_on:
- mysql # ensure that the database will start first
restart: always
mysql:
image: mysql:latest
container_name: ghost-db
environment:
- MYSQL_DATABASE=dbname # Change {{db-name}}
- MYSQL_ROOT_PASSWORD=db-pass # Change {{root-password}}
- MYSQL_USER=user # Change {{username}}
- MYSQL_PASSWORD=sq-pass # Change {{db-password}}
volumes:
- ./db:/var/lib/mysql
restart: always
2 ответов
в будущем, вы можете использовать этот сайт чтобы проверить, что с ним не так, а затем исправить это на ходу.
EDIT:
таким образом, проблемы, которые у вас были с файлом docker-compose, были следующими:
-
не добавлять услуги: после версии и
-
вам не нужно проходить :последний тег если вы хотите последнее изображение, вы передадите тег когда вы хотите определенную версию изображения, и это делается между «»
что касается кода, он должен быть следующим:
version: '2'
services:
ghost:
image: ghost
container_name: ghost-blog
environment:
- NODE_ENV=production
- MYSQL_DATABASE=db-name
- MYSQL_USER=user
- MYSQL_PASSWORD=pass
# - "MAILGUN_USER={{mailgun-user}}"
# - "MAILGUN_PASSWORD={{mailgun-password}}" # Change {{mailgun-password}}
volumes:
- ./ghost:/var/lib/ghost # persist the data
ports:
- 2368:2368
depends_on:
- mysql # ensure that the database will always start first
restart: always
mysql:
image: mysql
container_name: ghost-db
environment:
- MYSQL_DATABASE=dbname # Change {{db-name}}
- MYSQL_ROOT_PASSWORD=db-pass # Change {{root-password}}
- MYSQL_USER=user # Change {{username}}
- MYSQL_PASSWORD=sq-pass # Change {{db-password}}
volumes:
- ./db:/var/lib/mysql
restart: always
в моем случае ошибка, вызванная отсутствием пространства перед именем службы (например, mysql). Надеюсь, эта информация может помочь кому-то!