PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

docker-compose postgres restart setelah menjalankan skrip di docker-entrypoint-initdb.d

Sederhananya, ini terjadi dengan sengaja; penulis melakukannya sebagai bagian dari inisialisasi.

Sepertinya beberapa jawaban dapat ditemukan di skrip shell entrypoint gambar:

_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]"
}

Adapun "mengapa?" Saya pikir itu karena keinginan untuk menjalankan sebagai pengguna yang kurang istimewa.

Anda dapat "menyelesaikan" masalah dengan menentukan volume di file Compose seperti ini:

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

Kemudian, ia akan melewati rutinitas untuk memastikan DATABASE_ALREADY_EXISTS .

Atau, jika itu tidak membantu--Anda dapat menggali lebih dalam skrip titik masuk.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan nomor ganti?

  2. Bagaimana cara CAST AS DECIMAL di postgresql?

  3. Konfigurasikan STS dengan JPA 2.0 menggunakan PostgreSQL 9.3

  4. Solusi Ketersediaan Tinggi Pengelompokan PG Teratas untuk PostgreSQL

  5. Bagaimana cara mencadangkan semua db oleh pg_dump dalam file batch - postgres