Код в init.sh
не соответствует стандартному синтаксису оболочки Борна . Я считаю, что расширение будет искать переменную среды с именем psql[@]
, и когда переменной среды с таким именем не существует (включая знаки препинания как часть имени переменной), вы получите пустую строку (следовательно, параметр -f
будет интерпретируется как команда).
Если вы поместите свои SQL файлы инициализации непосредственно в каталог /docker-entrypoint-initdb.d
контейнера, запуск контейнера запустит их за вас. Разумно внедрить их, используя bind mount; производное изображение не требуется.
version: '3'
services:
db:
# Stock PostgreSQL image, not something locally built
image: postgres:12
volumes:
- pgdata:/var/lib/postgresql/data
# Bind-mount init scripts directly into init directory
- ./folder:/docker-entrypoint-initdb.d
volumes:
pgdata:
Если вы действительно хотите сохранить эти файлы в образе, COPY
сценарии SQL (а не оболочка оболочки Bourne) в каталог инициализации
COPY folder/*.sql /docker-entrypoint-initdb.d
Вам нужно сделать одно или другое, но не оба сразу.