PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

docker-compose postgres рестартиране след изпълнение на скриптове в docker-entrypoint-initdb.d

Казано просто, това се случва нарочно; авторът го прави като част от инициализацията.

Изглежда, че някои отговори могат да бъдат намерени в shell скрипта на входната точка на изображението:

_main() {
    # if first arg looks like a flag, assume we want to run postgres server
    if [ "${1:0:1}" = '-' ]; then
        set -- postgres "[email protected]"
    fi

    if [ "$1" = 'postgres' ] && ! _pg_want_help "[email protected]"; then
        docker_setup_env
        # setup data directories and permissions (when run as root)
        docker_create_db_directories
        if [ "$(id -u)" = '0' ]; then
            # then restart script as postgres user
            exec gosu postgres "$BASH_SOURCE" "[email protected]"
        fi

        # only run initialization on an empty data directory
        if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
            docker_verify_minimum_env

            # check dir permissions to reduce likelihood of half-initialized database
            ls /docker-entrypoint-initdb.d/ > /dev/null

            docker_init_database_dir
            pg_setup_hba_conf

            # PGPASSWORD is required for psql when authentication is required for 'local' connections via pg_hba.conf and is otherwise harmless
            # e.g. when '--auth=md5' or '--auth-local=md5' is used in POSTGRES_INITDB_ARGS
            export PGPASSWORD="${PGPASSWORD:-$POSTGRES_PASSWORD}"
            docker_temp_server_start "[email protected]"

            docker_setup_db
            docker_process_init_files /docker-entrypoint-initdb.d/*

            docker_temp_server_stop
            unset PGPASSWORD

            echo
            echo 'PostgreSQL init process complete; ready for start up.'
            echo
        else
            echo
            echo 'PostgreSQL Database directory appears to contain a database; Skipping initialization'
            echo
        fi
    fi

    exec "[email protected]"
}

Колкото до "защо?" Мисля, че е заради желанието да работите като по-малко привилегирован потребител.

Можете да "разрешите" проблема, като посочите том във файла за създаване по следния начин:

    volumes:
       - ./data/pgsql:/var/lib/postgresql/data

След това ще пропусне рутината, за да гарантира DATABASE_ALREADY_EXISTS .

Или, ако това не е от полза – можете да се поразровите още малко в скрипта на входната точка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво означава regclass в Postgresql

  2. Как да изпълня множество заявки с помощта на команда psql от bash shell?

  3. Концепции за висока достъпност на Oracle в PostgreSQL

  4. Преобразувайте набор от резултати от SQL масив в масив от низове

  5. Capistrano с PostgreSQL, грешка:базата данни е достъпна от други потребители