docker alpine postgres в компоновке не выполняет сценарии docker-entrypoint-initdb.d

При использовании образа https://github.com/kiasaki/docker-alpine-postgres в docker compose сценарии внутри /docker-entrypoint.initdb.d не выполняются, как я вижу из журналов:

 db_1   | LOG:  database system was shut down at 2016-09-05 18:16:02 UTC
 db_1   | LOG:  MultiXact member wraparound protections are now enabled
 db_1   | LOG:  database system is ready to accept connections
 db_1   | LOG:  autovacuum launcher started

Дело в том, что если я создам автономный файл Dockerfile и запущу контейнер, он выполнит файлы sql внутри папки, как вы можете видеть из журналов:

waiting for server to start....LOG:  database system was shut down at 2016-09-05 18:28:18 UTC
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
 done
server started

/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/syna-setup.sql
CREATE TABLE
INSERT 0 1
CREATE TABLE

waiting for server to shut down...LOG:  received fast shutdown request
.LOG:  aborting any active transactions
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down
 done
server stopped
LOG:  database system was shut down at 2016-09-05 18:28:21 UTC
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started
LOG:  received fast shutdown request
LOG:  aborting any active transactions
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down

Докер-compose.yml:

version: '2'
services:
  db:
    build: ./db
    environment:
     - POSTGRES_PASSWORD=testpass
    restart: always
  app:
    build: ./app
    ports:
     - "5000:5000"
    volumes:
     - .:/app/src
    depends_on:
     - db
    environment:
     - DB_SERVER=postgres://postgres:testpass@db:5432/postgres

Что я здесь делаю неправильно?


person Techradar    schedule 05.09.2016    source источник


Ответы (1)


ОБНОВЛЕНО, так как он использует свой собственный Dockerfile, а не ссылку на github.


Не могли бы вы предоставить команду запуска докера, чтобы if I build the Dockerfile standalone and run the container, it will execute the sql files inside the folder. Вы должны подключить какой-либо каталог к ​​контейнеру, чтобы он мог найти файлы SQL.

Я прочитал файл Dockerfile по адресу https://github.com/kiasaki/docker-alpine-postgres/blob/master/Dockerfile и спросил себя, где файлы SQL? Он просто создает каталог без копирования файлов SQL.

mkdir /docker-entrypoint-initdb.d

Затем в docker-entrypoint.sh он проверяет, есть ли какой-либо файл SQL для выполнения.

for f in /docker-entrypoint-initdb.d/*; do
        case "$f" in
            *.sh)  echo "$0: running $f"; . "$f" ;;
            *.sql) echo "$0: running $f"; psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < "$f" && echo ;;
            *)     echo "$0: ignoring $f" ;;
        esac
        echo
done

Я думаю, мы должны смонтировать каталог SQL, например

version: '2'
services:
  db:
    build: ./db
    environment:
     - POSTGRES_PASSWORD=testpass
    restart: always
    entrypoint:
     - docker-entrypoint.sh
    volumes:
     - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
     - ./docker-entrypoint.sh:/docker-entrypoint.sh
person Tuan    schedule 06.09.2016
comment
команда сборки и запуска выглядит как docker build -t postgres . && docker run postgres. Dockerfile базы данных имеет часть для передачи файлов следующим образом: FROM kiasaki/alpine-postgres:latest COPY docker-entrypoint-initdb.d /docker-entrypoint-initdb.d CMD ["postgres"] - person Techradar; 06.09.2016
comment
О, не могли бы вы попробовать переопределить ENTRYPOINT? Я отредактировал свой ответ. - person Tuan; 06.09.2016
comment
Большое спасибо! Вот и все! Просто нужно было исправить переменные среды, потому что значения по умолчанию, казалось, не были установлены, но это было легко с помощью среды. - person Techradar; 06.09.2016