Search code examples
postgresqldocker-composepostgis

provided user name (docker) and authenticated user name (root) do not match on docker compose


I am using the docker-compose file from the project docker-osm project.

The file is :


  version: '3.4'

  volumes:
    osm-postgis-data:
    settings-data:
    import_done:
    import_queue:
    cache:

  services:
    db:
      image: kartoza/postgis:${POSTGRES_VERSION}
      environment:
        - POSTGRES_USER=${POSTGRES_USER}
        - POSTGRES_PASS=${POSTGRES_PASS}
        - POSTGRES_DBNAME=${POSTGRES_DBNAME}
        - ALLOW_IP_RANGE=${ALLOW_IP_RANGE}
        - FORCE_SSL=${FORCE_SSL}
      volumes:
        - osm-postgis-data:/var/lib/postgresql
        - settings-data:/home/settings
      healthcheck:
        test: ["CMD-SHELL", "pg_isready -d ${POSTGRES_DBNAME} -U ${POSTGRES_USER}"]

    imposm:
      image: kartoza/docker-osm:imposm-latest
      volumes:
        - settings-data:/home/settings
        - import_done:/home/import_done
        - import_queue:/home/import_queue
        - cache:/home/cache
      depends_on:
        db:
          condition: service_healthy
      environment:
        - POSTGRES_USER=${POSTGRES_USER}
        - POSTGRES_PASS=${POSTGRES_PASS}
        - POSTGRES_DBNAME=${POSTGRES_DBNAME}
        - POSTGRES_PORT=${POSTGRES_PORT}
        - POSTGRES_HOST=${POSTGRES_HOST}
        - TIME=${TIME}
        - SETTINGS=${SETTINGS}
        - CACHE=${CACHE}
        - IMPORT_DONE=${IMPORT_DONE}
        - IMPORT_QUEUE=${IMPORT_QUEUE}
        - SRID=${SRID}
        - OPTIMIZE=${OPTIMIZE}
        - DBSCHEMA_PRODUCTION=${DBSCHEMA_PRODUCTION}
        - DBSCHEMA_IMPORT=${DBSCHEMA_IMPORT}
        - DBSCHEMA_BACKUP=${DBSCHEMA_BACKUP}
        - QGIS_STYLE=${QGIS_STYLE}
        - CLIP=${CLIP}
        - SSL_MODE=${SSL_MODE}

    osmupdate:
      image: kartoza/docker-osm:osmupdate-latest
      volumes:
        - settings-data:/home/settings
        - import_done:/home/import_done
        - import_queue:/home/import_queue
        - cache:/home/cache
      depends_on:
        db:
          condition: service_healthy
      environment:
        - MAX_DAYS=${MAX_DAYS}
        - DIFF=${DIFF}
        - MAX_MERGE=${MAX_MERGE}
        - COMPRESSION_LEVEL=${COMPRESSION_LEVEL}
        - BASE_URL=${BASE_URL}
        - IMPORT_QUEUE=${IMPORT_QUEUE}
        - IMPORT_DONE=${IMPORT_DONE}
        - TIME=${TIME}

    osmenrich:
      image: kartoza/docker-osm:osmenrich-latest
      volumes:
        - settings-data:/home/settings
        - import_done:/home/import_done
        - import_queue:/home/import_queue
        - cache:/home/cache
      depends_on:
        db:
          condition: service_healthy
      environment:
        - IMPORT_QUEUE=${IMPORT_QUEUE}
        - IMPORT_DONE=${IMPORT_DONE}
        - TIME=${TIME}
        - DBSCHEMA_PRODUCTION=${DBSCHEMA_PRODUCTION}
        - SSL_MODE=${SSL_MODE}

running docker-compose up results in :


root@gis FATAL:  role "root" does not exist

Changing the healthcheck in db service to :


    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d ${POSTGRES_DBNAME} -U ${POSTGRES_USER}"]

resulted in :


dockerosm-db-1         | 2023-09-26 08:46:34.632 UTC \[236\] docker@gis LOG:  provided user name (docker) and authenticated user name (root) do not match
dockerosm-db-1         | 2023-09-26 08:46:34.632 UTC \[236\] docker@gis FATAL:  Peer authentication failed for user "docker"
dockerosm-db-1         | 2023-09-26 08:46:34.632 UTC \[236\] docker@gis DETAIL:  Connection matched pg_hba.conf line 94: "local   all             all                                     peer"

Why does it authenticate on root rather than the user provided?

This post postgres with docker compose gives FATAL: role "root" does not exist error seems relevant, but I was unable to understand how to apply it in the current case.

Any ideas on where to start?


Solution

  • I was suffering from the same issue with attempting to use pg_isready health check with the kartoza/postgis image.

    Switching from "pg_isready -d ${POSTGRES_DBNAME} -U ${POSTGRES_USER}" to "pg_isready -h db" as in this answer resolved the issue.