Невозможно выполнить файл sql скрипт из docker compose - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь выполнить файлы sql из docker compose.

Мой файл набора:

    - ../folder:/docker-entrypoint-initdb.d/folder1/
    - ../folder2:/docker-entrypoint-initdb.d/folder2/

Файлы sql находятся в папке с именем folder.

Docker файл:

COPY init.sh /docker-entrypoint-initdb.d/init.sh

инициализация sh файл:

"${psql[@]}" -f folder1/*.sql
"${psql[@]}" -f folder2/*.sql

Я получаю:

postgres_1 | /usr/local/bin/docker-entrypoint.sh: игнорирование /docker-entrypoint-initdb.d/folder1 postgres_1 | postgres_1 | /usr/local/bin/docker-entrypoint.sh: выполняется /docker-entrypoint-initdb.d/init.sh postgres_1 | /docker-entrypoint-initdb.d/init.sh: строка: -f: команда не найдена

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Код в 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

Вам нужно сделать одно или другое, но не оба сразу.

0 голосов
/ 29 мая 2020

Согласно документации изображения mysql на docker хабе:

Когда контейнер запускается в первый раз, новая база данных с указанным именем будет создана и инициализирована предоставленным переменные конфигурации. Кроме того, он будет выполнять файлы с расширениями. sh,. sql и. sql .gz, которые находятся в /docker-entrypoint-initdb.d. Файлы будут выполняться в алфавитном порядке. Вы можете легко заполнить свои службы mysql, установив дамп SQL в этот каталог и предоставив пользовательские образы с предоставленными данными. Файлы SQL будут импортированы по умолчанию в базу данных, указанную переменной MYSQL_DATABASE.

Кроме того, журналы показывают, что ваш файл. sh запускается и имеет ошибки. Заглянув в код, кажется, что вы пытаетесь выполнить сценарий инициализации, который выполняет другие файлы *. sql, которые являются избыточными.

Если порядок выполнения желателен, придерживайтесь именования их в соответствии с алфавитным исполнение заказа.

...