Как запустить команды psql в докерском контейнере postgres, обрабатываемом docker-compose? - PullRequest
0 голосов
/ 27 апреля 2018

Этот вопрос относится к этому: Docker - Как можно запустить команду psql в контейнере postgres?

Но приведенное выше решение действительно только тогда, когда вы делаете что-то вручную, в то время как здесь вы хотели бы сделать это автоматически с помощью docker-compose.

Итак, этот докер-контейнер работает:

FROM postgres
COPY init.sql /docker-entrypoint-initdb.d/

но этот контейнер Docker не работает:

FROM postgres
RUN psql -U postgres -c "CREATE USER user WITH PASSWORD 'pass';"

потому что к моменту выполнения RUN сервер postgresql уже не запущен!

Есть ли способ преодолеть это ограничение?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете запускать некоторые сценарии в posgres, когда монтируете папку со своим сценарием в контейнер докера в /docker-entrypoint-initdb.d/ se docker-compose.yml, который монтирует папку sql. Изображения postgres потрясающие и будут запускать сценарии при каждом запуске postgres ...

version: '3.6'

services:  
  my_db:
    image: postgres:alpine
    volumes: ["/somepath/sql/:/docker-entrypoint-initdb.d/"]

структура файла /somepath/

- docker-compose.yml
- sql
  - new_extension.sql

и cat sql/new_extension.sql

/* create extension for cureent DB */
CREATE EXTENSION IF NOT EXISTS citext;
/* create extension over the template1 so all created databases after that also have the extension */
\c template1
CREATE EXTENSION IF NOT EXISTS citext;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...