सीधे शब्दों में कहें, यह उद्देश्य पर होता है; लेखक इसे आरंभीकरण के हिस्से के रूप में करता है।
ऐसा लगता है कि कुछ जवाब इमेज के एंट्री पॉइंट शेल स्क्रिप्ट में मिल सकते हैं:
_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
सुनिश्चित करने के लिए रूटीन को छोड़ देगा ।
या, अगर यह मददगार नहीं है--आप एंट्रीपॉइंट स्क्रिप्ट में थोड़ा और खुदाई कर सकते हैं।