2017-02-15 15 views
1

Я хочу создать базу данных после запуска изображения Postgres Docker.Как создать базу данных в контейнере Postgres Docker?

Проблема в том, что если я поместил свою команду создания базы данных в файл docker-compose или дочерний файл-докере, он переопределит команду базового изображения, чтобы фактически запустить postgres - поэтому у моего psql нет начального сервера для подключения.

т.д .:

version: '2' 
services: 
    db: 
    command: bash -c "su - postgres -c '/usr/lib/postgresql/9.6/bin/psql -h 127.0.0.1 -p 6543 -U postgres -c \"create database dev;\"'" 
    environment: 
     - PGDATA=/pg 
     - POSTGRES_PASSWORD=postgres 
     - POSTGRES_USER=postgres 
    image: postgres:9.6 
    ports: 
     - '6543:5432' 
    tmpfs: /pg 

И image documentation не говорит точную команду они работают, чтобы начать Postgres. Я попытался поставить bash -c "postgres && ... в начале моей команды, но он не сказал мне, что я не могу запустить Postgres как root.

Единственное возможное решение, которое я могу найти, - отказаться от файла docker-compose и dockerfile в пользу решения сценария bash, например docker run postgres:9.6 psql -h postgres -U postgres -c 'create database', но это ужасно.

Что делать?

ответ

3

Я бы так не сделал. Почему бы не начать второй контейнер с желаемым именем БД?

environment: 
    - PGDATA=/pg 
    - POSTGRES_PASSWORD=postgres 
    - POSTGRES_USER=postgres 
    - POSTGRES_DB=dev 

Просто запустите контейнер для каждой базы данных .. предпочли бы это как чистое решение.