Error yaml parser parsererror while parsing a block mapping

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=Ru...

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, были следующими:

  1. не добавлять услуги: после версии и

  2. вам не нужно проходить :последний тег если вы хотите последнее изображение, вы передадите тег когда вы хотите определенную версию изображения, и это делается между «»


что касается кода, он должен быть следующим:

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). Надеюсь, эта информация может помочь кому-то!


Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error ur is not detected please check the connection and reboot this software
  • Error xgen no clump guides found
  • Error windows named pipe error канал был закрыт code 109
  • Error update packages not found sync
  • Error wincc 1007001

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии