Вие отменяте оригиналната command
и не стартирате postgres в този скрипт, поради което вашата база данни не е достъпна.
Можете да поставите инициализацията на вашата база данни в директорията на входната точка на контейнера:/docker-entrypoint-initdb.d
. Това изпълнява всички *.sh
и *.sql
файлове в тази директория и не засяга оригиналната command
.
Всички файлове в тази директория се изпълняват автоматично по азбучен ред при създаване на контейнер . Затова създайте том, за да добавите вашите скриптове / sql файлове към входната точка и оставете контейнера да ги изпълни. Това е описано в официалната документация на postgres, раздел "Как да разширя това изображение"
.
След това вашият композиран файл се променя на нещо подобно:
postgres:
build: ./postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
- ./db-init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
докато локална директория, напр. db-init-scripts
, съдържа вашите скриптове за инициализация (преименувайте го, ако искате). Копирайте create_db.sh
в тази папка и ще се изпълни автоматично, когато създадете нов контейнер.
Няколко изображения на бази данни наблюдават тази директория с входна точка, което е много удобно.
Вашият container_name: postgres
изглежда излишно.